GCC:对 vtable 的未定义引用

Jac*_*oge 6 c++ gcc

这个问题不同于例如

g++ 和 gcc 有什么区别?

因为如果知道所描述问题的原因是“g++ 和 gcc 之间的差异”,则无需再寻找答案。换句话说,虽然答案相同,但问题不同。

我有以下程序test.cpp:

struct CircuitElement {
    bool value;
    const char *name;
    CircuitElement *next;

    CircuitElement (const char *name);    
    virtual void evaluate () = 0;       
};

struct Button: CircuitElement {
    Button (const char *name);
    virtual void evaluate ();
};

CircuitElement::CircuitElement (const char *name): name (name), next (0) {
}

Button::Button (const char *name): CircuitElement (name) {
}

void Button::evaluate () {
    // Some statements
}

Button button ("button");

int main () {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在 www.cpp.sh 上编译正常,但如果我在本地编译它:

gcc test.cpp
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

C:\Users\info_000\AppData\Local\Temp\cceVLVFd.o:test.cpp:(.rdata$_ZTV14CircuitElement[_ZTV14CircuitElement]+0x10): undefined reference to `__cxa_pure_virtual'
C:\Users\info_000\AppData\Local\Temp\cceVLVFd.o:test.cpp:(.rdata$_ZTI6Button[_ZTI6Button]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
C:\Users\info_000\AppData\Local\Temp\cceVLVFd.o:test.cpp:(.rdata$_ZTI14CircuitElement[_ZTI14CircuitElement]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info'
collect2.exe: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我一定是做错了一些微不足道的事情,我已经在谷歌上搜索答案很长一段时间了,但没有结果。

我缺少什么?