我有以下情形:C++導出模板執行不完全類型的
header.h:
class A
{
public:
class B; // incomplete type
private:
// is never used outside of source file for A
std::vector<B> vector_of_bs; // template
}
source1.cpp:
class A::B {}; // defined here
一切都很好,直到這裏。現在,如果我想使用class A
其他地方它不工作:
source2.cpp
:採用A級,不與
VS2010中的矢量(721)編譯:錯誤C2036: 'A :: B *' :未知尺寸
在編譯類模板的成員函數 '的std ::矢量< _Ty> &的std ::矢量< _Ty> ::運算符=(常量的std ::矢量< _Ty> &)'
。我如何鏈接到source1.o中std :: vector的模板特化?
我還需要與declspec(_dllimport)
使用此...
我不認爲這就足夠了。當生成副本分配/析構函數/拷貝構造函數等時,必須完成「B」,因此您可能需要在類定義中顯式聲明,然後在「B」完成的源文件中顯式默認,類似於帶'unique_ptr'的pimpls。 – 2015-02-09 19:28:07