我有一个从基类派生的类,并为每个类设置了构造函数,但我不断收到错误消息,说我没有基类的构造函数。
class Dog
{
protected:
string name;
int age;
public:
Dog(string dogsName, int dogsAge)
{
name = dogsName;
age = dogsAge;
}
virtual void Bark()
{
cout << "Woof Woof I am a dog" << endl;
}
class Huey: public Dog
{
public:
Huey()
{
name = "goodboy";
age = 13;
}
void Bark()
{
cout << "woof" << endl;
}
}
在这里,我在Huey()上收到一个错误,它说“'Dog'没有默认的构造函数”。但是我想我已经为Dog类创建了一个构造函数。你能解释一下为什么这个代码是错误的吗?
答案 0 :(得分:0)
当您指定自己的任何构造函数时,将不再创建默认构造函数。但是,您可以将其重新添加。
class Dog
{
protected:
string name;
int age;
public:
Dog() = default;
Dog(string dogsName, int dogsAge)
{
name = dogsName;
age = dogsAge;
}
virtual void Bark()
{
cout << "Woof Woof I am a dog" << endl;
}
};
class Huey: public Dog
{
public:
Huey()
{
name = "goodboy";
age = 13;
}
void Bark()
{
cout << "woof" << endl;
}
};
编辑:似乎您想从Dog
调用自定义Huey
构造函数。就是这样
class Dog
{
protected:
string name;
int age;
public:
Dog(string dogsName, int dogsAge)
{
name = dogsName;
age = dogsAge;
}
virtual void Bark()
{
cout << "Woof Woof I am a dog" << endl;
}
};
class Huey: public Dog
{
public:
Huey() : Dog("goodboy", 13) {}
void Bark()
{
cout << "woof" << endl;
}
};
答案 1 :(得分:0)
您需要创建一个没有参数且没有实现的构造函数。如下:
public:
Dog() = default;
答案 2 :(得分:0)
两种方法: 1)具有没有参数的默认构造函数。 2)从Huey调用Dog中现有的构造函数(这对您来说是正确的,因为Huey毕竟是Dog)。 Huey当前正在调用Dog的默认构造函数,因为尚未定义和显式调用它。