LINUX.ORG.RU

почему gcc не компилит такой код?


0

0

#include <string>

#include <map>

using namespace std;

template<class KEY, class TYPE>

class CKeyMap

{

...

inline bool GetKeyValue(KEY& rKey, TYPE& rValue)

{

map<KEY, TYPE>::const_iterator mapIterator = m_KeyMap.find(rKey);

...

}

...

};

отваливается ошибка:

/root/projects/lengine/src/containers.h: In member function `bool CKeyMap<KEY, TYPE>::GetKeyValue(KEY&, TYPE&)':

/root/projects/lengine/src/containers.h:37: error: expected `;' before "mapIterator"

/root/projects/lengine/src/containers.h:39: error: `mapIterator' undeclared (first use this function)

/root/projects/lengine/src/containers.h:39: error: (Each undeclared identifier is reported only once for each function it appears in.)

при этом этот код успешно компилился под ms компилером и intel c++ компилером под виндой

anonymous

попробуй компилить g++

laad
()

и не сиди под рутом ;)

Pi ★★★★★
()

map<KEY, TYPE>::const_iterator может быть константой, именем функции, переменной, typedef'ом в map<KEY, TYPE>. При компиляции темлейта это не ясно. gcc решил, что map<KEY, TYPE>::const_iterator - это выражение, а не "тип".

Пользуйтесь typename, чтобы помочь компилятору.

anonymous
()
Ответ на: комментарий от anonymous

> Пользуйтесь typename, чтобы помочь компилятору

спасибо, помогло

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.