私はいつも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;
}
コンパイラとプラットフォームについて教えてください。 –
私はg ++/Linuxを使用しています –