c ++继承问题:未定义引用' vtable'

时间:2018-01-16 05:21:14

标签: 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;
}

Base.cpp

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

您需要编译所有文件,然后将它们链接在一起。如果这样做,您将看到其他cpp文件中存在编译问题,如注释中所指出的那样(虚拟和覆盖仅属于标题)。

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