Шаблоны и вложенные классы / структуры

У меня есть простой контейнер:

template  list {
    public:
        struct node {
            nodeType info;
            node* next;
        };

    //...
};

Теперь есть функция под названием_search который ищет список и возвращает ссылку на соответствующий узел. Теперь, когда я имею в виду возвращаемый тип функции, я думаю, что это должно бытьlist::node*, Это правильно? Когда я определяю встроенную функцию, она отлично работает:

template  list {
    public:
        struct node {
            nodeType info;
            node* next;
        };

        node* _search {
            node* temp;
            // search for the node
            return temp;
        }
};

Но если я определю функцию вне класса,

template  list::node* list::_search() {
    //function
}

это нет работа. Компилятор выдает ошибку, говоряExpected constructor before list::_search или что-то. Ошибка что-то похожее на это. Я неУ меня нет машины, на которой я могу ее протестировать.

Любая помощь искренне ценится.

Ответы на вопрос(2)

Решение Вопроса

тот'потому чтоnode это зависимый тип. Вы должны написать подпись следующим образом (обратите внимание, что я разбил ее на 2 строки для ясности)

template <class nodetype=""> 
typename list<nodetype>::node* list<nodetype>::_search() 
{
    //function
}
</nodetype></nodetype></class>

Обратите внимание на использованиеtypename ключевое слово.

 Michael Dunn07 нояб. 2009 г., 20:18
Более, очень увлекательные подробности можно найти в C ++ FAQ Lite:parashift.com/c++-faq-lite/templates.html#faq-35.18
 Ashe01 мар. 2017 г., 04:05
Обновлена ссылка на FAQ:isocpp.org/wiki/faq/templates#dependent-name-lookup-types
 Rohan Prabhu13 нояб. 2009 г., 15:14
большое спасибо за помощь .. теперь она отлично работает. еще раз спасибо..

node это тип, использующий ключевое словоtypename. В противном случае он будет думать, что узел какstatic переменная вclass list, добавлятьtypename всякий раз, когда вы используете узел в качестве типа в вашей реализации списка.

Ваш ответ на вопрос