Задать вопрос
4NATIC
@4NATIC

Помогите с ошибкой в коде шаблонной функции

Есть такой код:

#define GDMLExtReader_H 1

#ifndef _WIN32
 #include <map>
#endif

class GDMLExtReader : public G4GDMLReadStructure

{

template  Type* GetPtr(const G4String& name, const std::map<G4String, Type*>& l)
 { 
 Type* ret = 0;
 std::map<G4String, Type*>::const_iterator pos = l.find(name);

 
 if (pos != l.end())
 ret = pos->second;
 else
 {
 G4String err_mess = "Attribute: " + name + " NOT found !";

 G4Exception("GDMLExtReader", "ReadError", FatalException, err_mess);
 }

return ret;
 }

};

#endif


Под Visual Studio компилируется и работает, а при попытке откомпилировать с помощью gcc под Ubuntu, вываливается с ошибкой:
In member function Type* GDMLExtReader::GetPtr(const G4String&, const std::map<G4String, Type*, std::less, std::allocator<std::pair<const G4String, Type*> > >&)':
include/GDMLExtReader.hh: error: expected ;' before pos'
include/GDMLExtReader.hh: error: pos' was not declared in this scope

Если в функции создавать переменную, а не итератор, т.е. std::map<G4String, Type*> pos2, то все работает.
Ошибка проявляется именно при создании итератора.
  • Вопрос задан
  • 2395 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
tzlom
@tzlom
#ifndef _WIN32
#include #endif

— и нахрена это, или думаете что GCC самоуплотнит нужную библиотеку в нужном месте?
совсем тупой вопрос и нежелание читать что пишет компилятор
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы