Инициализировать и записать массив в target-c - PullRequest
3 голосов
/ 05 июня 2011

В моем h-файле я объявляю переменную, которая позже должна быть массивом:

@interface myClass : CCNode {
  CGPoint *mVertices;
}

@end

В моем методе инициализации:

mVertices = malloc(size * size * sizeof(CGPoint));

mVertices[0][0] = ccp(0,0);

В этой последней строке я получаю сообщение об ошибке Подписанное значение не является ни массивом, ни указателем . Почему я получаю эту ошибку и как решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 05 июня 2011

mVertices - это указатель, но вы рассматриваете его как двумерный массив, который недопустим (хотя вы можете рассматривать его как одномерный массив).

Создание Динамический многомерный массив в (Objective) -C довольно сложен, поскольку компилятор должен знать размер всего, кроме первого измерения, чтобы фактически скомпилировать, где в памяти находится элемент.

НоВы можете сделать расчет самостоятельно:

mVertices[(row * size) + column] = ccp(row, column);

Вы можете определить макрос для этого:

#define VERTICE_ACCESS(row,colum) mVertices[(row * size) + column]
2 голосов
/ 05 июня 2011

Ваш массив не двумерный.Это просто список вершин.
Если вы хотите выделить место для динамического двумерного массива в C, вы можете сделать:

CGPoint** mVertices;
NSInteger nrows = 10;
NSInteger ncolumns = 5;
mVertices = calloc(sizeof(CGPoint*), nrows);
if(mVertices == NULL){NSLog(@"Not enough memory to allocate array.");}
for(NSUInteger i = 0; i < nrows; i++)
{
    mVertices[i] = calloc(sizeof(CGPoint), ncolumns);
    if(mVertices[i] == NULL){NSLog(@"Not enough memory to allocate array.");}
}
mVertices[0][5] = CGPointMake(12.0, 24.0);
mVertices[1][5] = CGPointMake(22.0, 24.0);
mVertices[2][5] = CGPointMake(32.0, 24.0);    
mVertices[2][1] = CGPointMake(32.0, 24.0);
for(NSUInteger i = 0; i < nrows; i++)
{
    for (int k = 0; k < ncolumns; k++) 
    {
        NSLog(@"Point %@", NSStringFromPoint(NSPointFromCGPoint(mVertices[i][k])));
    }
}

Я использовал calloc вместо malloc для получения CGPointsинициализируется с 0.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...