【问题标题】:Class initialization parens to use要使用的类初始化括号
【发布时间】:2014-01-19 10:32:22
【问题描述】:

我想初始化一些类成员,但出现错误 "expected parameter declarator" ( 使用 clang++ ) 使用 g++ "expected identifier before numeric constant". 所以我再次阅读了类初始化并编写了下面的代码:

#include <stdio.h>    
class AAA{
public:
    int l;
    AAA(int i){l=i;}
};

class BBB{
    bool normal;
    AAA aaa=10;
    AAA bbb(20);
    AAA ccc{30};
    AAA ddd={45};
};

int main(int argc, char **argv){printf("hello world\n");return 0;}

看来AAA bbb(20)这个语法不被接受!

这正常吗? (我使用选项 -std=c++11 )。

或者我错过了什么?

【问题讨论】:

  • 也使用AAA bbb{20};。

标签: c++ c++11


【解决方案1】:

这是正常的。 C++11 不允许在非静态数据成员的就地初始化中使用 () 括号。这是为了避免潜在的解析为函数。您可以通过以下语法使用() perantheses:

AAA bbb = AAA(20);

因为这个表单无法解析为函数。

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2016-04-14
    • 2017-07-24
    • 2020-05-14
    • 2012-08-04
    相关资源
    最近更新 更多