数据定义没有带有float数组定义的类型或存储类

时间:2011-02-06 03:29:33

标签: objective-c xcode

我可能会通过盲目实验或更好的Google搜索尽快找到答案,但是......这可能会让其他人受益。

这不在类定义中,而是在.m objective-c文件中。我有一个浮点数组的声明,它在Xcode中给了我以下两个警告。错误显示在DECLARATION行,而不是分配行。

数据声明没有类型或存储类。 在声明

中键入默认值为“int”

然后一个赋值失败 - 但如果变量默认为int,那就会发生。

这是代码。第一个声明(带有初始化程序的静态const浮点数组)不会产生错误,第二个声明(简单浮点数)也不会产生错误。第三个和第四个(浮点数组)。

static const float offset3d[4] = {
    0.0, 0.0, -2.0, 0.0
};
float boxv;
float boxv0[3];
float boxv1[3];

boxv0[0] = -0.5;
// this gives the error of trying to assign float to (default) int

2 个答案:

答案 0 :(得分:2)

您似乎正在尝试执行作业

boxv0[0] = -0.5;

在功能块之外,这是不允许的。在功能块之外,仅允许声明(使用或不使用初始化程序)。您收到的警告消息是由于C在传统上暗示int没有指定类型,因此,在功能块之外,

someVariable = 5;

隐式输入为int,即上述定义等同于

int someVariable = 5;

当编译器看到

boxv0[0] = -0.5;

在功能块之外,它注意到没有类型规范,因此它假设int(它发出警告)。然后它意识到boxv0之前已声明为float,因此它会产生冲突类型错误。

如果您需要在功能块之外初始化boxv0,请像对offset3d那样执行此操作,例如

float boxv0[3] = {
    -0.5f, -1.0f, -1.5f
};

答案 1 :(得分:0)

您需要将boxv0[0] = -05.;放在某个方法的某个位置。您的每个声明都应该有效,并且分配失败。您的第一个赋值是有效的,因为您完全分配了声明的数组 - 这是可以接受的,因为编译器可以创建内存位置并填充它。最后一个失败是因为您尝试在类方法之外动态修改它,编译器不允许。最后,如果您收到有关声明的警告,您可能还会有其他事情发生。