没有对基类函数的匹配函数调用

C++: No matching function call to base class function

本文关键字:函数调用 类函数 基类      更新时间:2023-10-16
 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()
        {
        }
当我尝试编译时,我得到了上面的错误。老实说,我也不知道为什么。

类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] = '';
    strncpy(_breed, breed, 20);
    _breed[19] = '';

类的析构函数也应该声明为虚函数。例如

virtual ~Dog() {}

virtual ~Dog() = default;