Итак, у меня довольно простой набор шаблонов, которые я хочу использовать вместе, но компилятор продолжает говорить мне, что 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;
}
Я спрашиваю это потому, что я столкнулся с некоторыми трудностями программирования некоторых классов типа массива, которые зависят друг от друга (реализаций двухмерного массива, который может доступ к ним можно получить следующим образом: [] []), но эта проблема возникла и бросила шестерню в работах. Я сделал эту программу тестирования, но она все еще терпит неудачу. Я пробовал как MinGW 4.7.2, так и GNU g ++ в Linux, и каждый из них дал мне ту же проблему.