在类中初始化类

时间:2017-07-27 16:54:52

标签: c++ class initialization

我是C ++的新手,我的问题可能很简单,但我无法找到解决方案。

我有两个班级,SLS看起来像这样:

class S
{
private:
    int m_x;

public:
    S(int x) : m_x(x)
    {
    }

    int m_y = 2*m_x;   // some random action in S
};

现在我有了第二个班级L,我想初始化一个S - 对象:

class L
{
private:
    S s(10);   // 10 is just some random value
    int m_y;
public:
    L(int y): m_y(y)
    {
    }

// ignore the rest for now.
};

这会在error: expected identifier before numeric constant的初始化行产生错误s(10)

我不明白为什么我不能这样做。我怎么能解决这个问题?如果我想要初始化对象S s(m_y),该怎么办?

2 个答案:

答案 0 :(得分:7)

您可以像m_y一样使用member initializer list

L(int y): s(10), m_y(y)
{
}

或者使用C ++ 11中的default initializer list,但请注意它仅支持大括号或等于初始值设定项,不包括括号。

class L
{
private:
    S s{10};   // or S s = S(10);
    int m_y;
public:
    L(int y): m_y(y) // s is initialized via default initializer list
                     // m_y is initialized via member initializer list
    {
    }
};

答案 1 :(得分:1)

您正在使用>c++11编译器并使用类非静态成员初始化作为行int m_y = 2*m_x;进行演示。要对可构造对象使用相同的初始化机制,必须使用统一初始化语法,使用大括号:

class L
{
private:
    S s{10};   // use braces
    int m_y;
public:
    L(int y): m_y(y)
    {
    }

// ignore the rest for now.
};