在类中初始化类

Dom*_*ikS 0 c++ initialization class

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

我有两节课,SL.S看起来像这样:

class S
{
private:
    int m_x;

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

    int m_y = 2*m_x;   // some random action in S
};
Run Code Online (Sandbox Code Playgroud)

现在我有了第二个类L,我想初始化一个S-object:

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.
};
Run Code Online (Sandbox Code Playgroud)

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

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

son*_*yao 7

您可以使用成员初始化列表,就像您所做的那样m_y:

L(int y): s(10), m_y(y)
{
}
Run Code Online (Sandbox Code Playgroud)

或者使用C++ 11中的默认初始化列表,但请注意它仅支持大括号或等于初始化程序,不包括括号.

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
    {
    }
};
Run Code Online (Sandbox Code Playgroud)