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