所以,我有一组相当简单的模板,我想一起使用,但编译器一直告诉我 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;
}
我问这个是因为我在编程一些相互依赖的数组类型类时遇到了一些困难(实现一个可以像这样访问的二维数组:[][]),但是这个问题发生了,并且在工作中投入了一个齿轮. 我做了这个测试程序,但它仍然失败。我在 Linux 上尝试过 MinGW 4.7.2 和 GNU g++,每个都给了我同样的问题。