C ++:没有匹配函数调用基类函数

时间:2015-06-07 08:03:42

标签: c++ class inheritance

 class Dobberman: public Dog
    {
    public:
        Dobberman()
            : Dog()
        {
            strncpy(_breed, "Dobberman", 20);
        }
        Dobberman( const char *name, const unsigned int age, const unsigned int pedigreeNo)
            : Dog(name,age), _pedigreeNo(pedigreeNo)
        {
        }
        ~Dobberman()
        {
        }

我尝试编译时遇到上述错误。老实说,不知道为什么。

1 个答案:

答案 0 :(得分:0)

Class Dog有一个带三个参数的构造函数

 Dog(const char *name, const unsigned int age, char *breed)

但是在类Dobberman的构造函数中,你调用一个带有两个参数而不是三个参数的Dog构造函数

Dobberman( const char *name, const unsigned int age, const unsigned int pedigreeNo) 
    : Dog(name,age), _pedigreeNo(pedigreeNo) { } 
      ^^^^^^^^^^^^^

因此,编译器发出一个错误,它无法在类Dog中找到带有两个参数的构造函数。

考虑到无论如何这个构造函数

Dog(const char *name, const unsigned int age, char *breed)
{
    strncpy(_name, name, 20);
    _age = age;
    strncpy(_breed, breed, 20);
}

定义不正确。对于第三个参数,您使用字符串文字作为参数。所以第三个参数必须声明为const char *breed

在构造函数的主体中而不是

    strncpy(_name, name, 20);
    strncpy(_breed, breed, 20);

你必须写

    strncpy(_name, name, 20);
    _name[19] = '\0';
    strncpy(_breed, breed, 20);
    _breed[19] = '\0';

类Dog的Alsodestructor应声明为virtual。例如

virtual ~Dog() {}

virtual ~Dog() = default;