友元方法不能访问嵌套类

C++: Friend method not accessing nested class

本文关键字:嵌套 访问 不能 方法 友元      更新时间:2023-10-16

我有以下内容:

using namespace std;
template<class T> class olsm;                 
template<class T> istream& operator>>(istream& in, olsm<T>& x);
template<class T> ostream& operator<<(ostream& out, olsm<T>& x);
template <class T>                                              
class olsm {
    friend istream& operator>> <> (istream& in, olsm& x);
    friend ostream& operator<< <> (ostream& out, olsm& x);
    public:                                
        class node {                           
            public:
        };
        ///Other stuff
};      
////More stuff
template<class T>
ostream& operator<<(ostream& out, olsm<T>& x) {
    olsm<T>::node* rowNode = x;
    //Even more stuff!
    return out;
}

但是当我试图编译时,我得到,

error: 'rowNode' was not declared in this scope

这很奇怪,因为我在我试图声明它的地方得到了错误。有人知道为什么吗?

olsm<T>::node*是一个依赖名称(它依赖于模板参数)。您需要编写typename olsm<T>::node*来告诉编译器它引用了一个类型(默认情况下,编译器将假定它引用了一个成员)。

这一行:

olsm<T>::node* rowNode
应:

   typename olsm<T>::node* rowNode
// ^^^^^^^^  You need to specify the member is a typename.