したがって、一緒に使用したいかなり単純なテンプレートのセットがありますが、コンパイラーは B::a が不完全な型であると私に言い続けます。すべてが前方宣言されていますが、それでも機能しません...
#include <iostream>
using namespace std;
template <typename T> class A;
template <typename T> class B;
template <typename T>
class A{
public:
void ATestFunction();
void CallBFunction();
protected:
B<T> b;
};
template <typename T>
class B{
public:
void BTestFunction();
void CallAFunction();
protected:
A<T> a;
};
template <typename T>
void A<T>::ATestFunction(){
cout << "A was used for a function call" << endl;
}
template <typename T>
void B<T>::BTestFunction(){
cout << "B was used for a function call" << endl;
}
template <typename T>
void A<T>::CallBFunction(){
b.BTestFunction();
}
template <typename T>
void B<T>::CallAFunction(){
a.ATestFunction();
}
int main()
{
A<int> dragons;
dragons.CallBFunction();
return 0;
}
相互に依存するいくつかの配列型クラスのプログラミング ([][] のようにアクセスできる 2 次元配列の実装) で問題が発生したため、これを尋ねますが、この問題が発生し、作業にギアが投げ込まれました。 . このテスト プログラムを作成しましたが、それでも失敗します。Linux で MinGW 4.7.2 と GNU g++ の両方を試しましたが、それぞれ同じ問題が発生しました。