C++ 继承问题 : undefined reference to 'vtable'

标签 c++ inheritance polymorphism header-files vtable

全部!我正在尝试使用 C++ 和头文件创建一个非常简单的继承结构,但是(当然)我遇到了一些困难。

当我尝试编译我的主程序时,我得到这个错误:

In function `Base::Base()':
undefined reference to 'vtable for Base'
In function `Derived::Derived()':
undefined reference to 'vtable for Derived'

我只想打印

printed in Derived

但是我遇到了一些极端的困难。

这是我的程序文件:

main.cpp

#include <iostream>
#include "Base.h"
#include "Derived.h"

using namespace std;

int main(void) {
    Base *bp = new Derived;
    bp->show();
    return 0;
}

基础.cpp

#include <iostream>
#include "Base.h"

virtual void Base::show() {
    cout << "printed in Base";
}

基础.h

#ifndef BASE_H
#define BASE_H

class Base {
    public:
        virtual void show();
};

#endif

Derived.cpp

#include <iostream>
#include "Derived.h"

using namespace std;

void Derived::show() override {
    cout << "printed in Derived";
}

Derived.h

#ifndef DERIVED_H
#define DERIVED_H

class Derived: public Base {
    public:
        void show() override;
};

#endif

谢谢!非常感谢任何帮助!...非常感谢。

最佳答案

正如评论中所指出的,通过调用 g++ main.cpp,您只是在编译 main.cpp

您需要编译所有文件,然后将它们链接在一起。如果这样做,您会发现其他 cpp 文件中存在编译问题,正如评论中所指出的那样(virtual 和 override 仅属于 header )。

所以你需要调用下面的代码来编译所有的文件: g++ main.cpp Base.cpp Derived.cpp -o myapp

关于C++ 继承问题 : undefined reference to 'vtable' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48274562/

相关文章:

c++ - 程序崩溃,树太大

c++ - 节点层次和继承

r - `NextMethod()` 的内部工作原理

C++ 重载基于 shared_ptr 派生类的函数

C++ 多态性 - 自动检测派生类型

Java泛型类型比较

c++ - 在没有循环的情况下在opencv::Mat中创建一个矩形零

C++ dynamic_cast 异常

ruby-on-rails - 单表继承和 ActiveRecord 关联

arrays - Haskell 多态数组操作