Objective-C实现一个类(数组的初始化)

时间:2012-01-26 02:55:05

标签: objective-c

我的数组初始化出现了一个奇怪的错误。我缺少什么?错误发生在gameBoard数组。

@implementation TicTacToe

- (id)init
{
    self = [super init];
    if (self)
    {
        gameBoard [3][3] = {{0, 0, 0},
                            {0, 0, 0},
                            {0, 0, 0}}; // error is saying: "expected expression"
        turn = 1;
        winner = 0;
        cellsChosen = 0;   
    }
    ...

2 个答案:

答案 0 :(得分:1)

您在gameBoard宣布了@interface TicTacToe,对吗?然后你不能使用C数组初始化语法,因为你的数组已经初始化了。遗憾的是,C不提供分配数组的快捷方式,因此您应该创建一个使用您的值初始化的临时数组,然后使用memcpy将其元素复制到数组中。

...
if (self)
{
    int tmpGameBoard[3][3] = {{0, 0, 0},
                              {0, 0, 0},
                              {0, 0, 0}};
    NSAssert(sizeof(tmpGameBoard) == sizeof(gameBoard),
             @"gameBoard is not a 3x3 array");
    memcpy(gameBoard, tmpGameBoard, sizeof(tmpGameBoard));
...

NSAssert用于确保您没有更改接口中的数组大小并忘记更新其初始化(最好使用编译时断言而不是NSAssert,但这是另一个主题)。

答案 1 :(得分:0)

objc初始值设定项不是“正确的”初始值设定项。你的ivars的内存已经存在,并且已经用零内存初始化了。所以你没有在这个范围内使用实际的初始化语法。这就是const ivar无用的原因,除非你对使用专门用于该ivar的归零内存感到满意(或者你打破了const承诺)。

你可以使用类型的赋值(创建一个临时的),或者你可以使用通常的内存复制。