类A
包含受保护的int x
。类B
扩展了类A
。现在,类B
想要做的是将x
的值设置为它自己的构造函数中的传递参数。当我尝试这样做时,我收到错误:
“”x“不是非静态数据成员或类”B“”的基类。
#include <string>
#include <iostream>
class A {
protected:
int x;
public:
A()
{
}
};
class B : public A {
public:
B(int x)
: x(x)
{
}
};
int main()
{
}
答案 0 :(得分:4)
你可以“设置”它,但不能初始化它,因为它已经在初始化基类对象时被初始化了。你可以像这样“设置”它:
B(int x)
{
this->x = x; // assignment, not initialization
}
A
的一个构造函数更有意义地处理A::x
的初始化:
A(int x) : x(x) {}
然后在B
中使用它:
using A::A; // allows B b{42};