我的代码中出现链接器错误。我已将其归结为以下基本要素。
此代码给出了链接器错误“vtable for Foo”,引用自:Foo::Foo()
class Foo {
public:
Foo();
virtual ~Foo() = default;
};
Foo::Foo() { }
但是这段代码没有给出任何错误:
class Foo {
public:
Foo();
virtual ~Foo() { }
};
Foo::Foo() { }
为什么?我认为= default
应该基本上和那些空方括号做同样的事情。
更新:我正在使用“Apple LLVM 编译器 4.1”,它是 Xcode 4.5.2 的一部分。这可能是这个编译器中的一个错误吗?它可能适用于最新的 GCC(尽管 Apple 不再发布)。有关编译器的讨论,请参见下面的评论。
更新 2:如下所述,更改行以virtual inline ~Foo() = default;
消除此错误。这不只是一个错误吗?在这种情况下,如果没有明确写出,编译器似乎无法识别内联函数inline
。