2011-02-06 64 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 
};