12

我已将问题简化为以下示例代码:

class pokemon{
    public:
        pokemon(int n);
};

class MewTwo : public pokemon {
    public:
        MewTwo(int n);
};

MewTwo::MewTwo(int n) {}

这会产生错误:

调用 'pokemon::pokemon()' 没有匹配的函数</p>

认为正在发生的是,当我尝试编写不存在的 MewTwo 构造函数时,会调用 pokemon 的默认构造函数。我对 C++ 比较陌生,所以我只是在这里猜测。有任何想法吗?

约束:修复不能修改或添加公共成员到类。

4

2 回答 2

16

实际上,您正在寻找的是成员初始化列表。将继承的类构造函数更改为以下内容:

class MewTwo : public pokemon {
    public:
        MewTwo(int n) : pokemon(n) {}
};

你确定发生了什么是正确的。基本上,当您创建继承类时,您首先创建基类并且您不能这样做,因为没有定义默认构造函数。成员初始化列表可以帮助您解决这个问题:)

查看:http ://www.cprogramming.com/tutorial/initialization-lists-c++.html获取更多示例!

于 2010-12-04T05:52:20.297 回答
7

试试这个 :

class pokemon{
    public:
        pokemon(int n);
};

class MewTwo : public pokemon {
    public:
        MewTwo(int n) :pokemon(n){}
};
于 2010-12-04T05:51:49.270 回答