C ++: метод Friend не имеет доступа к вложенному классу - PullRequest
3 голосов
/ 20 октября 2011

У меня есть следующее:

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

, что странно, потому что я получаю ошибку в строке, которую пытаюсьобъявить это в.Кто-нибудь знает почему?

Ответы [ 2 ]

9 голосов
/ 20 октября 2011

olsm<T>::node* является зависимым именем (зависит от параметра шаблона). Вам нужно написать typename olsm<T>::node*, чтобы сообщить компилятору, что он ссылается на тип (по умолчанию компилятор предполагает, что он ссылается на член).

См. этот вопрос для более подробного объяснения.

3 голосов
/ 20 октября 2011

Эта строка:

olsm<T>::node* rowNode

должна быть:

   typename olsm<T>::node* rowNode
// ^^^^^^^^  You need to specify the member is a typename.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...