2017-10-11 186 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'类。 –