簡體   English   中英

通過objective-c消息傳遞訪問c風格對象數組的正確語法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM