2013-03-27 2 views
2

Я хотел бы создать NSObject подкласс, который содержит несколько члена варов:магазин массив NSObject указателей в массиве C

@interface PointMass : NSObject 
{ 
    CGPoint mCurPosition; 
    CGPoint mLastPosition; 
    CGPoint mAcceleration; 
} 

-(id) initWithPosition:(CGPoint*) pos; 


#import "PointMass.h" 

@implementation PointMass 

-(id) initWithPosition:(CGPoint*)pos 
{ 
    mCurPosition = *pos; 
    mLastPosition = *pos; 
    mAcceleration = ccp(0,0); 
    return self; 
} 

@end 

И я хотел бы создать массив C-стиль, чтобы держать кучу из них в cocos2d класса:

// mNumPoint declared in interface, I've set it to 100 
PointMass *pointMassList; 
pointMassList = malloc(sizeof(PointMass*) * mNumPointMass); 

for (int = 0; i < mNumPointMass; i++) 
{ 
    CGPoint point = ccp(100,100); 
    PointMass *p = [[PointMass alloc] initWithPosition: &point]; 
    pointMassList[i] = p; 
} 

Но я получаю сообщение об ошибке

Expected method to write array element not found on object of type 'PointMass *' 

мне нужно делать т.е ll компилятор больше о моем объекте PointMass, если я хочу хранить указатели на него в массиве C?

Я в основном пытаюсь поиграть с некоторыми математическими частицами на iPhone без необходимости постоянно открывать точки из NSArray, если не ясно, чего я пытаюсь достичь здесь.

Если бы я пошел об этом в обратном порядке, я бы очень хотел, чтобы его исправили. Прошло некоторое время с тех пор, как я написал ваниль C, и я немного ржавый!

ответ

5

это было некоторое время, так как я написал ванильный C

Вы все еще должны быть в состоянии сделать различие между указателем-to T и указатель на указатель-to T (T есть PointMass в этом случае). Вы хотите сохранить массив из PointMass * и не массив PointMass (который вы все равно не могли сделать). Таким образом, измените объявление pointMassList на

PointMass **pointMassList; 

и он будет работать. Однако, если вы используете Objective-C в любом случае, почему бы вам просто не хранить экземпляры в NSArray?

+0

Прошло некоторое время с тех пор, как я просмотрел в своем заголовочном файле проблему: -S, конечно, я имел в виду указатель на указатель! Вам нужен кофе! Я использую индексирование C в первую очередь потому, что у меня многомерные массивы и не нашел способа получить к ним доступ в NSArray, который так же хорош, как foo [x] [y] – davbryn

+3

@davbryn 'NSArray' может быть проиндексирован так же, как при использовании современные компиляторы. – 2013-03-27 19:43:40

Смежные вопросы