我是C ++的新手,我的问题可能很简单,但我无法找到解决方案。
我有两个班级,S
和L
。 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
};
现在我有了第二个班级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)
,该怎么办?
答案 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.
};