在基于插件的C++项目中,我有一个用于在主应用程序和插件之间交换数据的TmpClass
。因此,相应的TmpClass.h
包含在主应用程序项目包含的抽象插件接口类中,并由每个插件实现。C++:不内联时,构造函数/析构函数未解析吗?
由于插件在TmpClass
实例的STL向量上工作,因此需要为TmpClass
设置默认的构造函数和析构函数。我曾在TmpClass.h
宣布这些:
class TmpClass {
TmpClass();
~TmpClass();
}
和TmpClass.cpp
实现它们。
TmpClass::~TmpClass() {}
TmpClass::TmpClass() {}
然而,编译插件时,这会导致链接器抱怨大约两个无法解析的外部 - 本所要求的std::vector<TmpClass>
模板实例化默认的构造函数和TmpClass
析构函数 - 即使所有其他功能我宣布在TmpClass.h
和实施TmpClass.cpp
工作。只要我从.cpp文件中删除(空的)默认构造函数和析构函数并将它们内联到.h文件中的类声明中,插件就可以编译和工作。
为什么它默认的构造函数和析构函数有内联这个代码来编译?为什么它甚至是maatter? (我正在使用MSVC++ 8)。
您是否将TmpClass.cpp包含到项目中? – SysAdmin 2010-05-05 05:19:45
是 - 请参阅我的评论以回答1. – Anamon 2010-05-05 05:26:16