在基於插件的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