繁体   English   中英

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

[英]Objective-C Implementing a class (Initialization of array)

我对数组的初始化收到一个奇怪的错误。 我有什么想念的吗? 错误是在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;   
    }
    ...

您已经在@interface TicTacToe声明了gameBoard ,对吗? 然后,您将无法使用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 ,但这是另一个主题)。

objc初始值设定项不是“适当的”初始值设定项。 您的ivars内存已经存在,并且已使用零内存进行初始化。 因此您在此范围内没有使用实际的初始化语法。 这就是为什么const ivar没用的原因,除非您对专门为该ivar使用归零内存感到满意(否则您将违反const promises)。

您可以为类型使用赋值(创建临时),也可以使用常规的内存复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM