好的,我们有了Task来为一个继承自另一个类的类创建构造函数,该构造器也继承自另一个类。我们对此的解决方案是以下代码:
AxeThrowerTroll:: AxeThrowerTroll(std::string name, char team, int health, unsigned int power, unsigned int armor, unsigned int numAxes)
: Troll(Monster(name, team, health, power), armor(armor)), numAxes(numAxes)
{
}
但是,如果要编译代码,则会收到以下错误:
error: 'armor' cannot be used as a function
Troll的定义是:
class Troll : public Monster
{
public:
unsigned int armor;
Troll(std::string, char, int, unsigned int, unsigned int);
virtual void attack(Monster*);
virtual void support(Monster*);
virtual std::string asString();
};
怪物:
class Monster{
public:
std::string name ;
char team;
int health;
unsigned int power;
Monster(std::string, char, int, unsigned int);
virtual ~Monster();
virtual void attack(Monster*);
virtual void support(Monster*);
virtual std::string asString();
};
你们中的一个人有建议我们如何使它起作用吗?
最佳答案
我猜你的AxeThrowerTroll::AxeThrowerTroll
定义应该看起来像这样:
AxeThrowerTroll::AxeThrowerTroll(std::string _name,
char _team,
int _health,
unsigned int _power,
unsigned int _armor,
unsigned int _numAxes)
: Troll(_name, _team, _health, _power), armor(_armor)
Troll
的C'tor应该按其签名所要求的那样按原样传递参数,并且您不应该为其建立Monster
实例(这是Troll
的职责)。另一件事-
Troll
没有声明numAxes
数据成员(根据您的代码)。完成后,将其添加到您的初始化列表中。通常:C'tor脱节中的所有参数都不应遮盖数据成员(这就是为什么我在每个数字之前添加下划线-“_”)。并且每个C'tor只能在其初始化列表中调用直接基类C'tor和数据成员。
关于c++ - C++中的多层构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53804727/