我尝试用自己的代码创建某些内容的定义,但是编译器无法识别它,所以仅是代码,我就编写了一个更简短的代码来表示我要执行的操作:< / p>
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一起使用,所以请使用其他可能有用的解决方案吗?
答案 0 :(得分:1)
我们应该告诉编译器A<T>::B
template<class T>
typename A<T>::B & A<T>::B::increase()
{
x++;
return *this;
}