在使用两种不同的方法初始化继承类中的成员数据时,我有一个错误,我认为它们在理论上应该是相同的。
class gSolObject
{
public:
gSolObject();
virtual ~gSolObject(){}
bool isCollisionObject;
};
class gPlanetObject : public gSolObject
{
public:
gPlanetObject();
~gPlanetObject(){};
};
gSolObject::gSolObject():isCollisionObject(1)
{
}
gPlanetObject::gPlanetObject():gSolObject(),isCollisionObject(0)
{
}
我收到错误类' gPlanetObject'没有任何名为'isCollisionObject '的字段。
但是,当我将初始化权限放入构造函数的括号{..}时:
gPlanetObject::gPlanetObject():gSolObject()
{
isCollisionObject=0;
}
编译好。为什么会这样?
编辑:这也不起作用
gPlanetObject::gPlanetObject():gSolObject(),gSolObject::isCollisionObject(0)
它在'('token'
之前写出'预期的类名答案 0 :(得分:7)
您无法初始化在基类中声明的成员变量,因为基类构造函数已经初始化它们。所有基础构造函数都在成员构造函数之前执行。
您可以重新分配它。或者,您可以调用一个基类构造函数,该构造函数接受一个参数并使用该值初始化其成员。
答案 1 :(得分:1)
已编辑:您无法调用未初始化对象的方法(此处为gSolObject
),这就是它在构造函数中执行isCollisionObject(0)
时的工作原理。此外,如果始终将其设置为0,则应在gSolObject构造函数中使用默认值。