【发布时间】:2010-05-05 05:15:30
【问题描述】:
在基于插件的 C++ 项目中,我有一个 TmpClass,用于在主应用程序和插件之间交换数据。因此相应的TmpClass.h包含在主应用项目所包含的抽象插件接口类中,并由每个插件实现。
由于插件在TmpClass 实例的STL 向量上工作,因此TmpClass 需要有一个默认构造函数和析构函数。我已经在TmpClass.h 中声明了这些:
class TmpClass {
TmpClass();
~TmpClass();
}
并在TmpClass.cpp 中实现它们。
TmpClass::~TmpClass() {}
TmpClass::TmpClass() {}
但是,在编译插件时,这会导致链接器抱怨两个未解析的外部变量 - TmpClass 的默认构造函数和析构函数,这是 std::vector<TmpClass> 模板实例化所要求的 - 即使我在 TmpClass.h 中声明的所有其他函数和在TmpClass.cpp 工作中实施。一旦我从 .cpp 文件中删除(空)默认构造函数和析构函数并将它们内联到 .h 文件中的类声明中,插件就会编译并工作。
为什么默认构造函数和析构函数必须内联才能编译此代码?为什么它甚至很重要? (我使用的是 MSVC++8)。
【问题讨论】:
-
您是否将 TmpClass.cpp 包含到项目中?
-
是的 - 请参阅我的评论以回答 1。
标签: templates stl constructor visual-c++ linker