Wil*_*tor 1 c++ constructor class member-initialization
我无法在另一个类的定义中声明具有常量参数的类的实例.
class Foo
{
private:
const int m_a, m_b;
public:
Foo(int a, int b) : m_a(a), m_b(b) {}
};
class Bar
{
public:
Foo foo1(1,2);
Foo foo2(2,3);
};
Run Code Online (Sandbox Code Playgroud)
从这里我得到错误:
"error: expected identifier before numeric constant"
"error: expected ',' or '...' before numeric constant"
Run Code Online (Sandbox Code Playgroud)
And*_*owl 11
这不是初始化数据成员的方式.您必须在构造函数的初始化列表中执行此操作:
class Bar
{
public:
Bar() : foo1(1,2), foo2(2, 3) { }
// ^^^^^^^^^^^^^^^^^^^^^^^
// This is how you initialize the sub-objects of a class
// (both base sub-objects and member sub-objects)
Foo foo1;
Foo foo2;
};
Run Code Online (Sandbox Code Playgroud)
请注意,C++ 11确实允许对数据成员进行内联初始化,但语法略有不同(您需要使用大括号):
class Bar
{
public:
Foo foo1{1, 2};
Foo foo2{2, 3};
};
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用复制初始化语法:
class Bar
{
public:
Foo foo1 = Foo(1, 2);
Foo foo2 = Foo(2, 3);
};
Run Code Online (Sandbox Code Playgroud)
您必须通过构造函数初始化这些成员:
class Bar
{
public:
Foo foo1;
Foo foo2;
Bar() : foo1(1, 2), foo2(2, 3) {}
};
Run Code Online (Sandbox Code Playgroud)
冒号后面的是成员初始化列表.