我尝试在自己的代码中创建某些东西的定义,但编译器无法识别它,所以只是简单的代码,我制作了一个更简短的抽象代码来表示我正在尝试做的事情:
template <class T>
class A
{
public:
A() {}
~A() {}
class B
{
T x;
public:
B() : x(0) {}
~B(){}
void printAB() const;
B& increase();
};
};
现在,我想在类外定义printAB
和increase
,所以printAB
不会产生任何问题,因为它返回 void,但是当我尝试定义PrintAB
时,编译器无法识别它并在其下划线:
这个效果很好:
template <class T>
void A<T>::B::printAB() const
{
cout << "Hello World" << endl;
}
而这个它不认识:
template<class T>
A::B & A<T>::B::increase()
{
x++;
return *this;
}
我也试图做出这样的声明:
template<class T>
A<T>::B & A<T>::B::increase() {
...
}
我必须说它不适用于你们建议的 A,所以请问任何其他可能有帮助的解决方案吗?
我们应该告诉编译器我们所说的A<T>::B
是什么意思
template<class T>
typename A<T>::B & A<T>::B::increase()
{
x++;
return *this;
}