好吧,我们有了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
巨魔的定义是:
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();
};
你们当中有一个关于如何使它工作的建议吗?
答案 0 :(得分:1)
我想您的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
实例(它是{{1} })。
另一件事-Troll
没有声明Troll
数据成员(根据您的代码)。完成后-将其添加到您的初始化列表中。
通常:C'tor脱节中的所有参数都不应遮盖数据成员(这就是为什么我在每个数字之前加下划线-“ _”)。而且每个C'tor都只能在其初始化列表中调用直接基类C'tor和数据成员。