繁体   English   中英

编译器坚持引用不存在的构造函数

[英]Compiler Insists on Referring to Non-existent Constructor

我要做的是根据Player的属性构造一个shadow (或敌人)。 我有两个 Shadow class 构造函数:一个接受playerboss参数,一个只接受玩家参数。 如果boss是真的, shadow会得到更好的统计数据。

我的代码:

class Player
{
    
    public:
        typedef size_t pos;
    private:
        mutable pos lp;
        mutable pos sp;
        mutable pos exp;
        mutable pos lvl;

        std::string name;


    public:

        explicit Player(std::istream & is){is >> lp >> sp >> exp >> lvl >> name;}
        Player(const std::string & aName, pos aLp = 100, pos aSp = 100, pos aExp = 1, pos aLvl = 1): 
        name(aName), lp(aLp), sp(aSp), exp(aExp), lvl(aLvl) {}

};

class Shadow
{
public:
    using pos = size_t;
private:
    pos lvl;
    pos lp;
    bool boss;
public:
    static const pos sp = ULLONG_MAX;
    explicit Shadow(const Player & player): lvl(player.lvl + 5), lp(player.lp + 50) {}
    Shadow(const Player & player, bool boss);
    pos showLvl() const {return this->lvl;}
    pos showLp() const {return this->lp;}

};


Shadow::Shadow(const Player & player, bool boss)
{
    if(!boss)
        Shadow(player); // error here
    else
    {
        lvl = player.lvl + 10;
        lp = player.lp + 150;
    }

    int main()
    {Player Minato("Minato");
    Player Junpei("Junpei");
    Player Yukari("Yukari");
    Player Akihiko("Akihiko");

    Shadow blockGuard(Minato, false);
     return 0;}

我得到的错误是:“没有匹配的 function 调用 'Shadow::Shadow()'。”

问题是没有 Shadow::Shadow() 构造函数。 帮助?

编码

Shadow(player); // error here

不做你认为它做的事。 它等效于以下代码:

Shadow player;

也就是说:您正在尝试声明 class Shadow的本地 object player并默认构建它。 由于缺少构造函数,这失败了。

你想调用一个委托构造函数。 为此,您需要使用初始化列表

Shadow::Shadow(const Player & player, bool boss) : Shadow(player) {
    if (boss) {
        // boost stats
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM