ошибки компилятора — ISO C ++ запрещает объявление «it» без типа для автоматического итератора?

У меня есть эти шесть строк:

    auto it = rcp_amxinfo.find(LocalPass.script);//175
if (it != rcp_amxinfo.end()) //176
{//177
if(it->second.GPSRouteCalculated.PublicFound)//178
{
...
amx_Exec(LocalPass.script, NULL, it->second.GPSRouteCalculated.POINTER);//186

они прекрасно компилируются в VS2012, но в GCC на centOS6 я получаю следующие ошибки:

./RouteConnector/main.cpp:175: error: ISO C++ forbids declaration of ‘it’ with no type
./RouteConnector/main.cpp:175: error: cannot convert ‘std::_Rb_tree_iterator<std::pair<AMX* const, Callbacks> >’ to ‘int’ in initialization
./RouteConnector/main.cpp:176: error: no match for ‘operator!=’ in ‘it != rcp_amxinfo.std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = AMX*, _Tp = Callbacks, _Compare = std::less<AMX*>, _Alloc = std::allocator<std::pair<AMX* const, Callbacks> >]()’
./RouteConnector/main.cpp:178: error: base operand of ‘->’ is not a pointer
./RouteConnector/main.cpp:186: error: base operand of ‘->’ is not a pointer

rcp_amxinfo определяется следующим образом:

struct CallbackAMX
{
bool PublicFound;
int POINTER;
CallbackAMX()
{
PublicFound = false;
POINTER = 0;
}
};

struct Callbacks
{
CallbackAMX ClosestNodeIDChange;
CallbackAMX GPSRouteCalculated;
};

std::map            <AMX*, Callbacks>               rcp_amxinfo;

Как я могу решить эти ошибки в Linux?

2

Решение

Включить режим C ++ 11 при сборке. Вы делаете это, добавляя -std=gnu++11 (чтобы также получить расширения GCC, которые включены по умолчанию), или -std=c++11 (только для ISO C ++) на флаги вашего компилятора.

auto означает что-то другое в C ++ 11 (где он выводит тип), чем в предыдущем стандарте (где он определяет класс автоматического хранения.)

9

Другие решения

Других решений пока нет …