为什么我不能在类定义中直接初始化私有成员变量

时间:2018-08-18 10:10:12

标签: c++

假设我有以下代码:

class A
{
    public:
        A(int Val)
        {
            _val = Val;
        }
        virtual ~A() = default;

    private:
        int _val = 0;
};

class B
{
    public:
        B() = default;
        virtual ~B() = default;

    private:
        A _a(3); // Error: expected identifier before numeric constant
};

int main()
{
    B b;
    return 0;
}

当我尝试直接初始化“ A _a(3);”时我将从编译器中收到以下错误: “数值常量前的预期标识符” 怎么了?

非常感谢

2 个答案:

答案 0 :(得分:4)

您可以使用class node { public: string data; node *left = nullptr; node *right = nullptr; }; 语法:

{}

或使用class B { public: B() = default; virtual ~B() = default; private: A _a{ 3 }; };

=

不允许使用括号来避免烦人的解析。

答案 1 :(得分:1)

A _a(3); 

C ++编译器将以上行解释为函数_a(),该函数返回类型A。

如@ Jarod42 A _a{3};所指出的那样。