2016-01-30 112 views
1

有沒有人知道這個錯誤意味着什麼,當我試圖在一個結構中定義一個數組時發生的原因?C++ struct「不完整的類型是不允許的」

struct test{ 
    int idk[] = { 1,2,3 }; 
}; 

爲什麼數組idk不完整類型或什麼?

在此先感謝。

Ps。 我需要這個,所以我可以從測試結構中訪問這些數組。

+1

使用'詮釋IDK的[3] = {1,2,3};' – user38034

+2

大多數時候,陣列尺寸可以從初始化推斷出來。但是這對於類成員的數組不起作用。對於這些,你必須明確說明大小。 –

+1

與變量定義不同,非靜態類數據成員的default-member-initializer不是該成員可以擁有的唯一初始化程序,因此不適合推斷數組大小。 –

回答

3

在本地作用域中聲明變量時(例如在函數體中),可以這樣做,編譯器不會發出抱怨,它會推斷出您的意思是一個由3個元素組成的int數組。

void someFunc() 
{ 
    int idk[] = { 1,2,3 }; // Ok, so idk is in fact a int[3]; 
    // Do whatever work... 
} 

在做一個類或結構聲明同樣的事情,編譯器不想推斷出你,所以基本上,你需要更嚴格。

有關完整的原因,你可以在這裏看到(What is the reason for not being able to deduce array size from initializer-string in member variable?)等地。

因此,要使其工作,你需要這樣的:

struct test 
{ 
    int idk[3] = { 1,2,3 }; 
}; 

至於爲什麼有人會不喜歡這個問題,嗯,這是怎樣的一個世俗的問題,真正在谷歌任何搜索將產生回答。編譯器本身會退出這個錯誤,只是在大多數時候爲你尋找答案。

基本上,這類問題告訴社區這裏你沒有做任何研究,然後再問你的問題。

與Visual Studio編譯器,它創建了一個錯誤: 錯誤C2997「測試:: IDK的」:數組邊界不能從一流初始化

這是非常明確的推斷。

米克

+0

我有Visual Studio但由於某種原因沒有得到該錯誤。我做了研究,但每次人們都在討論關於數組的結構。但謝謝你的解釋。 –

1
array bound cannot be deduced from an in-class initializer 

因此改變代碼段

struct test{ 
int idk[3] = { 1,2,3 }; 

導致編譯成功。

相關問題