考虑以下:
在Xh 中:
class X
{
X();
virtual ~X();
};
X.cpp:
#include "X.h"
X::X()
{}
尝试构建它(我正在使用 .dll 目标来避免丢失主服务器上的错误,并且我正在使用 Visual Studio 2010):
错误 1 错误 LNK2001:未解析的外部符号“私有:虚拟 __thiscall X::~X(void)”(??1X@@EAE@XZ)
但是,小的修改会导致构建成功:
Xh:
class X
{
inline X(); // Now inlined, and everything builds
virtual ~X();
};
或者
Xh:
class X
{
X();
~X(); // No longer virtual, and everything builds
};
当 .dtor 是虚拟的或 .ctor 未内联时,是什么导致链接器中未解析的外部?
编辑:
或者,也许更有趣的是,如果我将析构函数设为非虚拟,或者如果我内联构造函数,为什么我没有得到未解析的外部?