ошибка карты при кодировании для ARM9 с использованием компилятора ADS 1.2 и ARM11 RVCT2.2

Я портирую свой код, написанный на cpp для поддержки ARM9 с использованием компилятора ADS 1.2, но после переноса приведенного ниже кода выдает ошибку при компиляции для ARM11 с использованием компилятора RVCT2.2, это пример кода

list<int,allocator<int> > mystack;
map<int*,list<int,allocator<int> >,less<int*>,allocator<pair<int*,list<int,allocator<int> > > > > mymap;
mymap[addr] = mystack;
Error 1:Error:  #167:argument of type "std::allocator<std::pair<int *,
std::list<int, std::allocator<int>>>>::const_pointer" is incompatible with
parameter of type "std::allocator<std::pair<int *, std::list<int,
std::allocator<int>>>>::pointer"
Error 2:Error:  #434: a reference of type
"__rw::__rw_tree_iter<__rw::__rb_tree<std::map<int *, std::list<int,
std::allocator<int>>, std::less<int *>, std::allocator<std::pair<int *,
std::list<int, std::allocator<int>>>>>::key_type, std::map<int *,
std::list<int, std::allocator<int>>, std::less<int *>,
std::allocator<std::pair<int *, std::list<int,
std::allocator<int>>>>>::value_type,  (not const-qualified) cannot be
initialized with a value of type "std::map<int *, std::list<int,
std::allocator<int>>, std::less<int *>, std::allocator<std::pair<int *,
std::list<int, std::allocator<int>>>>>::value_type"return _C_node->_C_value();

0

Решение

Проблема у вас есть распределитель для std::map должна быть пара

std::pair<const Key, T>

Право не у вас

pair<int*,list<int,allocator<int> > >

Что не так, как у вас нет Key конст квалифицирован. Так должно быть

pair<int* const,list<int,allocator<int> > >

Поскольку вы используете стандартный распределитель, нет причин указывать распределитель. Вы можете просто использовать

list<int> mystack;
map<int*,list<int>> mymap;
mymap[addr] = mystack;

И список по умолчанию будет использовать std::allocator<int> и карта по умолчанию будет использовать std::less<int*> а также std::allocator<int * const, std::list<int>>

Тоже не то std::less<int*> не сравнивайте значения int* указывает на, но вместо этого он сравнивает адрес. Если вам нужен первый, вам нужно написать свой собственный объект сравнения для этого.

0

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

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