c ++继承编译问题未定义对派生类的引用[重复]
Posted
技术标签:
【中文标题】c ++继承编译问题未定义对派生类的引用[重复]【英文标题】:c++ inheritance compilation problem undefined reference to derived class [duplicate] 【发布时间】:2020-03-19 10:28:53 【问题描述】:class BaseClass
public:
BaseClass();
virtual void vfunc1()= 0;
virtual void vfunc2();
virtual void vfunc3();
virtual void vfunc4();
virtual ~BaseClass();
private:
int x;
int y;
;
class SubClass : public BaseClass
public:
SubClass();
virtual void vfunc1();
virtual void vfunc3();
virtual void vfunc5();
~SubClass();
private:
int z;
;
int main()
BaseClass *bc = new SubClass();
return 0;
错误如下:
Temp\ccsj6Duj.o:demo.cpp:(.text+0x20): undefined reference to `SubClass::SubClass()' collect2.exe:
error: ld returned 1 exit status
请帮助我是新的 C++: 问题在于 inhwritance 和 vtable : 这是一个更好地理解继承的演示
【问题讨论】:
你的实现在哪里?既然你有一个main
方法,我猜你没有任何问题:p
我只想编译代码,但我不能。建议?尖端?实现示例? .我只想要编译的最少代码。谢谢帮助
最低限度的需求实现,如果你不告诉编译器怎么知道你的类或函数做了什么?你有一个链接器错误,因为编译器找不到Subclass
的构造函数的实现
代码编译;它无法 link 因为您没有为您声明的代码提供任何实现,这些代码将成为您构建的一部分。例如:: SubClass::SubClass()
实际上在哪里 实现 ?我可以看到它在哪里声明,但“那里”在哪里?
嗯,你是对的,它无法链接......我只是想拥有一个对空类和另一个空继承类不执行任何操作的 .exe。看来我必须阅读更多。谢谢
【参考方案1】:
virtual void vfunc1()= 0;
这段代码意味着 BaseClass 是一个抽象类。继承抽象类时,必须实现所有纯函数,否则继承的类也是抽象类。 (纯虚拟析构函数除外)
抽象类不能定义对象,只能为继承类提供接口。我认为这就是为什么你有一个编译错误。
【讨论】:
即使我删除该行它也不会链接...我希望空实现...或什么都不做的最低限度的实现...谢谢... OP 在SubClass
中用virtual void vfunc1();
覆盖纯虚方法,因此SubClass
不会是抽象的。但是 OP 似乎没有为 any 声明的函数提供实现。以上是关于c ++继承编译问题未定义对派生类的引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章