2017-10-11 182 views
0

在以下代碼:C++ - 成員變量集合初始化

class Class 
{ 
private: 
LUID luid; 

public: 
Class() 
{ 
luid = { 0, 0}; // A. Does not compile 
LUID test = {0, 0}; // B. Compiles 
test = {1,1}; // C. Does not compile 
} 

爲什麼A和C不正確的,但B是細?

我得到了A和C的錯誤是:

錯誤C2059:語法錯誤: '{'

錯誤C2143:語法錯誤: 缺少 ';'之前'{'

錯誤C2143:語法錯誤: 缺少';' '''

我認爲它與C++版本有關,但我不確定使用哪個版本,除此之外它不是很新。

+0

那好時間去找出你所使用的編譯器(名稱,版本號等) – UnholySheep

+3

LUID'是如何定義'你有C++ 11或更高的轉身? on? – NathanOliver

+0

@UnholySheep輸出該格式錯誤的唯一常見C++編譯器是MS VC++。 –

回答

3

陳述LUID test = {0, 0}初始化使用初始化列表的局部變量;這是有效的,因爲它在變量定義的過程中使用。相反,test = {0, 0}轉讓,因爲test在其他地方定義。指定初始值設定項列表僅在特定情況下受支持(例如,當分配給標量或特定類別類型時(例如,參見braced-init-list assignment)。

其他情況,例如數組,不能是分配只是初始化:

typedef int LUID[2]; 

int main(){ 

    LUID t = { 10, 20 }; // compiles 
    // t = { 10, 20};  // does not compile, since an array is not assignable 

    return 0; 
} 
+0

這並不能解釋它爲什麼給出* syntax *錯誤。即使它不是有效的,它也是有效的語法它用於'LUID'類。 –