具有常量参数的类声明中的类实例

时间:2013-04-21 22:02:58

标签: c++ class constructor 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);
};

从这里我得到了错误:

"error: expected identifier before numeric constant"
"error: expected ',' or '...' before numeric constant"

3 个答案:

答案 0 :(得分:11)

这不是初始化数据成员的方式。你必须在构造函数的initialization list

中完成它
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;
};

请注意,C ++ 11允许对数据成员进行内联初始化,但语法略有不同(需要使用大括号):

class Bar
{
public:
    Foo foo1{1, 2};
    Foo foo2{2, 3};
};

或者,您也可以使用复制初始化语法:

class Bar
{
public:
    Foo foo1 = Foo(1, 2);
    Foo foo2 = Foo(2, 3);
};

答案 1 :(得分:5)

您必须通过构造函数初始化这些成员:

class Bar
{
    public:
        Foo foo1;
        Foo foo2;

        Bar() : foo1(1, 2), foo2(2, 3) {}
};

冒号后面的是 member-initializer list

答案 2 :(得分:1)

在C ++ 03中,Bar需要在其构造函数中初始化其属性:

class Bar
{
    public:
        Foo foo1;
        Foo foo2;

        Bar() : foo1(1,2), foo2(2,3) {} 
};