C++ 多态性错误
C++ Polymorphism Error
我在C++中使用多态性来创建多态性的基本"族"。但是,在尝试创建儿子 boo 时,我遇到了错误:error C2512: 'Son' : no appropriate default constructor available
和 error C2660: 'Son::Son' : function does not take 2 arguments
,这让我感到困惑,因为它们都是 Child
类的一部分,这需要两个参数
#include <iostream>
class Parent{
public:
Parent(char* name) : Name(name){};
char* Name;
void Speak(void){
std::cout << "I am a parent called " << Name << std::endl;
}
};
class Child{
public:
Child(Parent* parent, char* name) : par(parent), Name(name){};
Parent* par;
char* Name;
virtual void Speak(void){
std::cout << "I am a child, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
class Son : public Child{
public:
void Speak(void){
std::cout << "I am a son, my name is " << Name << " and my parent's name is " << par->Name << std::endl;
}
};
int main(void){
Parent Dad = Parent("James");
Child Lisa = Child(&Dad, "Lisa");
Son Boo = Son(&Dad, "Boo"); // Error here
Dad.Speak();
Lisa.Speak();
Boo.Speak();
getchar();
return (0);
}
正如编译器指出的那样,您尚未为 Son 类提供有效的构造函数。尝试:
Son(Parent* parent, char* name) : par(parent), Name(name){};
编辑:正如dasblinkenlight指出的那样,由于这里的儿子没有任何自己的成员来初始化,你应该直接引用子类的构造函数。
Son(Parent* parent, char* name) : Child(parent, name) {}
这是因为没有用户定义构造函数的Son
类派生自 Child
,它具有用户定义的构造函数,并且没有可以在没有参数的情况下调用的构造函数。
当C++构造对象时,必须调用构造函数。如果未定义构造函数,编译器将为您定义一个构造函数(如果可以)。在这种情况下,它无法执行此操作,因为它不知道将什么传递给基类的构造函数。
将构造函数添加到正确初始化Child
的Son
构造函数应该可以解决此问题:
Son(Parent* parent, char* name) : Child(parent, name) {}
从基类派生时,构造函数不是继承的。
这就是为什么您必须为 Son
提供一个构造函数
相关文章:
- 运行时多态性 - 箭头运算符访问了错误的成员?
- 如何避免指针超出范围(多态性)的C++分段错误
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- C2011错误C 试图进行多态性
- 收到未定义的引用错误 c++ 继承/多态性
- 这种多态性隐喻是错误的吗?
- C++ 多态性错误
- 关于多态性和常量的错误
- 多态性>错误:'no known conversion from derived class to base class'
- C++多态性中的访问冲突(虚拟指针函数指向错误的位置?
- 涉及多态性的极其奇怪的错误
- C++ 代码多态性的错误结果
- 尝试使用多态性C++时发生编译错误
- 为什么为模板实例化声明运行时多态性会导致链接器错误
- c++代码中的动态多态性错误
- CRTP和动态多态性编译错误
- 多态性:代码中的复杂性错误.需要一个解释
- C++中的指针、多态性和分段错误
- 多态性错误C++
- 多态性 c++ 错误输出