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()
{
}
我尝试编译时遇到上述错误。老实说,不知道为什么。
答案 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;