[英]Correct syntax for accessing c-style object array through objective-c messaging?
請看評論:
static void drawAnObject() {
Form *form = [[Form alloc] init];
int i;
[form randomizeCube];
glColor3f(0.0, 0.0, 0.0);
for(i = 0; i < MAX_CUBE; i++) {
glutWireCube(form->cube[i]->size);
//compiler issues hard warning because form->cube is protected!!
}
}
我寧願使用我放在“Form”類上的訪問器,所以我寧可寫下這樣的東西:
glutWireCube([[form cube][i] size]);
但是當我嘗試編譯它時,我得到一個“無法轉換為指針類型”錯誤。
這是我在“表單”類中的訪問者:
@implementation Form
- (Cube *) cube {
return *cube;
}
變量“cube”在“Form”類的頭文件中定義如下:
@interface Form : NSObject <NSCopying> {
Cube *cube[MAX_CUBE];
}
以下是其頭文件中定義的“Cube”類變量:
@interface Cube : NSObject <NSCopying> {
double size;
double positionX;
double positionY;
double positionZ;
}
...以及實現(.m)文件中的相應訪問器:
- (double) size {
return size;
}
- (void) setSize: (double) newSize {
size = newSize;
}
- (double) positionX {
return positionX;
}
- (void) setPositionX: (double) newPositionX {
positionX = newPositionX;
}
- (double) positionY {
return positionY;
}
- (void) setPositionY: (double) newPositionY {
positionY = newPositionY;
}
- (double) positionZ {
return positionZ;
}
- (void) setPositionZ: (double) newPositionZ {
positionZ = newPositionZ;
}
我想避免使用NSMutableArray或NSArray,因為我計划稍后將這部分項目代碼移植到非Cocoa平台。
我花了最后幾個小時尋找正確的方法來做到這一點。 使用C樣式數組和Objective-C訪問器是否有“正確的方法”?
你的訪問者方法中缺少一個星號。 這很棘手,因為您無法從C或Objective-C中的方法返回數組類型。 嘗試這個:
@implementation Form
- (Cube **) cube {
return &cube[0]; // alternatively just "return cube;" will suffice
}
@end
這將返回一個指向指針的指針,因此當您使用[form cube][i]
下標時,您仍然會使用指針類型,並且在Objective-C接收器中必須是指針類型。 這應該允許你這樣做
glutWireCube([[form cube][i] size]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.