好的,我们有了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/

10-11 00:22