我有一个CGPoint
的C数组,我想在头文件中声明.h。
CGPoint checkPoint[8];
但是当我尝试在.m中给它一个值时:
checkPoint[8] = { //<-- Error Here
CGPointMake(0, -10),
CGPointMake(10, 0),
CGPointMake(0, 10),
CGPointMake(-10, 0),
CGPointMake(-10, -10),
CGPointMake(10, -10),
CGPointMake(10, 10),
CGPointMake(-10, 10)
};
它指向第一个左括号的错误:预期表达式
我不太习惯使用C数组,这样做的正确方法是什么?
修改
我在头文件中尝试使用extern
但是我收到此错误消息:类型名称不允许指定存储类。
答案 0 :(得分:3)
您需要在标题中的声明中添加extern
:
extern CGPoint checkPoint[8];
这将使它成为一个声明,而不是声明/定义。请注意,由于在初始化程序中调用CGPointMake
,定义将无法编译(必须是编译时常量,但CGPointMake
是函数)。
您可以将CGPointMake
替换为{.x= 0, .y=-10}
样式的初始值设定项,如下所示:
checkPoint[8] = { //<-- Error Here
{.x=0, .y=-10},
{.x=10, .y=0},
{.x=0, .y=10},
{.x=-10, .y=0},
{.x=-10, .y=-10},
{.x=10, .y=-10},
{.x=10, .y=10},
{.x=-10, .y=10}
};
注意:(响应要提问的评论主题)
extern
用于声明全局变量。它们不属于任何类,因此它们的声明必须在@interface
之外,并且它们的定义必须在@implementation
块之外。
答案 1 :(得分:2)
在标头中将其声明为extern CGPoint checkPoint[8]
,然后在一个源文件中将其初始化为CGPoint checkPoint[8] = { { 0.0f, -10.0f }, { 10.0f, 0.0f }, … };
如果没有extern
,您将在包含标题的每个文件中重新定义它。初始化者也需要是编译时常量。