2

我有一个CGPoint要在头文件 .h 中声明的 C 数组。

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)
};

它给了我一个指向第一个左括号的错误:Expected expression

我不太习惯使用 C 数组,正确的方法是什么?

编辑

extern在头文件中尝试过,但收到此错误消息:类型名称不允许指定存储类。

4

2 回答 2

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用于声明全局变量。它们不属于任何类,因此它们的声明需要在 a 之外@interface,并且它们的定义需要在@implementation块之外。

于 2013-11-08T10:34:22.080 回答
2

在标题中声明它extern CGPoint checkPoint[8],然后在一个源文件中您可以将其初始化为CGPoint checkPoint[8] = { { 0.0f, -10.0f }, { 10.0f, 0.0f }, … };

如果没有,extern您将在每个包含标题的文件中重新定义它。初始化器也需要是编译时常量。

于 2013-11-08T10:34:13.840 回答