Error: no default constructor exists for class
Error: no default constructor exists for class
我有一个从基础 class 派生的 class,并为每个 class 设置了构造函数,但我不断收到错误提示,我没有基础 [=] 的任何构造函数16=].
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' 不存在默认构造函数”。但我想我已经为 class Dog 创建了一个构造函数。你能解释一下为什么这段代码是错误的吗?
当您指定自己的任何构造函数时,不再创建默认构造函数。但是,您可以将其添加回去。
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;
}
};
编辑:您似乎想从 Huey
调用自定义 Dog
构造函数。这样就完成了
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;
}
};
您需要创建一个无参数且无实现的构造函数。如下:
public:
Dog() = default;
两种方式:
1)有一个没有参数的默认构造函数。
2) 从 Huey 调用你在 Dog 中的现有构造函数(这在你的情况下是正确的,因为 Huey 毕竟是一只 Dog)。 Huey 目前正在调用 Dog 的默认构造函数,因为它没有定义和显式调用。
我有一个从基础 class 派生的 class,并为每个 class 设置了构造函数,但我不断收到错误提示,我没有基础 [=] 的任何构造函数16=].
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' 不存在默认构造函数”。但我想我已经为 class Dog 创建了一个构造函数。你能解释一下为什么这段代码是错误的吗?
当您指定自己的任何构造函数时,不再创建默认构造函数。但是,您可以将其添加回去。
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;
}
};
编辑:您似乎想从 Huey
调用自定义 Dog
构造函数。这样就完成了
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;
}
};
您需要创建一个无参数且无实现的构造函数。如下:
public:
Dog() = default;
两种方式: 1)有一个没有参数的默认构造函数。 2) 从 Huey 调用你在 Dog 中的现有构造函数(这在你的情况下是正确的,因为 Huey 毕竟是一只 Dog)。 Huey 目前正在调用 Dog 的默认构造函数,因为它没有定义和显式调用。