下に例を載せているが、クラス定義の中で前方宣言したクラスの変数を定義する際は、ポインタやテンプレート変数ならばいいけれども、そのまま使うことはできない。vectorのテンプレート変数にする分には問題ない。
ここらへんはごまかして勉強したのでダメですね。
// case1: OK
class A; // 前方宣言
class B{
A *a;
};
// case2: OK
class A;
class B{
std::vector<A> a;
};
// case3: OK
class A;
template<class T=A>
class B{
T a;
};
// case4: NG
class A;
class B{
A a;
};
2 件のコメント:
はじめまして。
case2は確かにそれ単体ではコンパイルは通るのですが、実際に他のファイルでテンプレートを実体化するときにコンパイルエラーが起こるようです。
使用したコンパイラはgcc4.6.2です。
情報ありがとうございます。また自分でも確認してみます。
コメントを投稿