2011-02-06 67 views
0

我可能会很快通过盲目实验或更好的Google搜索找到答案,但是..这可能会使其他人受益。数据定义没有浮点数组定义的类型或存储类

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

数据声明没有类型或存储类。 声明中的类型默认为'int'

然后赋值失败 - 但如果该变量默认为int,则会发生。

这是代码。第一个声明(具有初始化器的静态const float数组)不会给出错误,第二个声明(简单的float)也不会。第三和第四(浮动阵列)。

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 
+0

你在做功能块外的任务吗? – 2011-02-06 03:46:53

回答

0

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

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