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 ++继承编译问题未定义对派生类的引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++未定义对已继承的受保护类成员的引用[重复]

未定义的引用,继承问题 - C++ [重复]

c++ 继承问题:未定义对“vtable”的引用

C ++ - 定义 - 私有继承[重复]

对“vtable”的未定义引用

如何修复“对‘Shape::Shape()’的未定义引用 - 在 C++ 中构建失败 3 个错误”