2011-06-20 15 views
3

私はいつもC++では、参照またはポインタで前方宣言されたクラスのみを使用できることを知っていました。なぜテンプレート宣言としてstd::vectorというフォワード宣言されたクラスを使用するのですか?私はコンパイル時に何の問題もありませんか?テンプレート引数としてのクラスの前方宣言

おかげ

AFG

// MyFile.hpp 
class OutClass{ 
public: 
     class InnClass; 
     OutClass(); 
     void print(); 

     // why this doesn't create compile time 
     std::vector<InnClass> m_data; 
}; 


// MyFile.cpp 
class OutClass::InnClass{ 
public: 
     InnClass() : m_ciao(0) {} 
     int m_data; 
}; 


OutClass::OutClass() 
: m_data(){ 
     InnClass a, b; 
     a.m_ciao=1; b.m_ciao=2; 
     m_data.push_back(a); 
     m_data.push_back(b); 
} 

void OutClass::print(){ 
     std::cout << m_data[0].m_ciao << std::endl; 
     std::cout << m_data[1].m_ciao << std::endl; 
} 


int main(int argc, char** argv){ 
     OutClass outObj; 
     outObj.print(); 
     return 0; 
} 
+0

コンパイラとプラットフォームについて教えてください。 –

+0

私はg ++/Linuxを使用しています –

答えて

4

多分あなたのプラットフォーム上でstd::vectorの具体的な実装は、完全な型するTを必要としないので。 vectorの場合、これは比較的簡単です。基本的にはポインタのみで構成されているため、正しい場合は完全な型は必要ありません。しかし、afaikは標準T完全型のためにstd::vectorのために要求します。だから、それに頼らないでください。

+0

..mmhh..おそらくあなたの助けとして私はstd :: vectorを調べる必要があります。どうもありがとう。 –

関連する問題