我的数组初始化出现了一个奇怪的错误。我缺少什么?错误发生在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;
}
...
答案 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
承诺)。
你可以使用类型的赋值(创建一个临时的),或者你可以使用通常的内存复制。