如何在接收类之外声明嵌套类的方法

时间:2018-09-11 18:51:27

标签: c++

我尝试用自己的代码创建某些内容的定义,但是编译器无法识别它,所以仅是代码,我就编写了一个更简短的代码来表示我要执行的操作:< / p>

template <class T>
class A
{
public:
    A() {}
    ~A() {}

    class B
    {
        T x;
    public:
        B() : x(0) {}
        ~B(){}

        void printAB() const;
        B& increase();
    };
};

现在,我想在课外定义printABincrease,所以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一起使用,所以请使用其他可能有用的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我们应该告诉编译器A<T>::B

是什么意思
template<class T> 
typename A<T>::B & A<T>::B::increase() 
{
    x++;
    return *this;
}