2010-09-22 3 views
0

Как я вернуть итератор функцию формы:возвращение итератора

я Worte это: . ..

template<class S,class T> class Database { 
public: 
. 
.. 
map<S,Node<T>*> m_map::iterator Find (S keyToFind); 
. 
.. 
.... 


private: 
. 
.. 
map<S,Node<T>*> m_map; 
.. 
. 
}; 

. 
.. 
template<class S,class T> 
map<S,Node<T>*> m_map::iterator Find (S keyToFind) { 
map<S,Node<T>*>::iterator itMap; 
itMap = m_map.find(KeyToUpDate); 
return itMap; 
} 
.. 
. 

есть много ошибок, потому что этого: Ошибка 1 ошибка C2653: 'm_map': это не класс или пространство имен имя Ошибка 2 Ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором «Найти» Ошибка 3 ошибки C4430: отсутствует спецификатор типа - int. Примечание: C++ не поддерживает default- Ошибка 5 Ошибка C2653: 'm_map': это не класс или пространство имен имя Ошибка 7 Ошибка C2133: 'Итератор': неизвестен размер .. ...

я дон «т понять, что проблема ..

ответ

2

Это должно быть:

template<class S,class T> 
typename map<S,Node<T>*>::iterator Find(S keyToFind) { 
    typename map<S,Node<T>*>::iterator itMap; 
    itMap = m_map.find(KeyToUpDate); 
    return itMap; 
} 

и

typename map<S,Node<T>*>::iterator Find (S keyToFind); 

typename необходима потому, что iterator является зависимым типом, смотри, например, here.

3

Вашей Find функции должен быть определен как:

template<class S,class T> 
typename map<S,Node<T>*>::iterator Find (S keyToFind) { 
    map<S,Node<T>*>::iterator itMap; 
    itMap = m_map.find(KeyToUpDate); 
    return itMap; 
} 

без„m_map“, который вы имели как часть возвращаемой функции типа.

Редактировать: Хотя на самом деле нет необходимости создавать временный итератор itMap; вы можете напрямую вернуть результат find. Кроме того, я думаю, что KeyToUpDate должен быть keyToFind. Выполнение этих изменений, вы бы в конечном итоге с:

template<class S,class T> 
typename map<S,Node<T>*>::iterator Find (S keyToFind) { 
    return m_map.find(keyToFind); 
} 
6

Похоже, вы хотите:

typename map<S,Node<T>*>::iterator 

Вы должны действительно использование ЬурейеЕ, чтобы очистить этот материал:

template<class S, class T> 
class Database 
{ 
public: 
    // I hope you have't put `using namespace std;` in a header... 
    typedef std::map<S, Node<T>*> map_type; 
    typedef typename map_type::iterator iterator; 
    // etc... 

    // use references to avoid copying 
    iterator Find (const S& keyToFind); 
private: 
    map_type m_map; 
}; 
+0

Первый комментарий должен быть «Я надеюсь, что вы не поставили«, используя патезрасе «в заголовке». Я надеюсь. –

+0

@ Zan: Ха, спасибо. :) – GManNickG

Смежные вопросы