使用 ADS 1.2 编译器和 ARM11 RVCT2.2 为 ARM9 编码时出现映射错误
map error while coding for ARM9 using ADS 1.2 compiler and ARM11 RVCT2.2
我正在使用 ADS 1.2 编译器移植我用 cpp 编写的代码以支持 ARM9,但是在使用 RVCT2.2 编译器为 ARM11 编译时移植以下代码后出现错误,这是示例代码
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();
您遇到的问题是 std::map
的分配器需要一对
std::pair<const Key, T>
对了,你没有
pair<int*,list<int,allocator<int> > >
这不等于你没有Key
const 限定。应该是
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*
指向的值,而是比较地址。如果您需要前者,您需要编写自己的比较对象来执行此操作。
我正在使用 ADS 1.2 编译器移植我用 cpp 编写的代码以支持 ARM9,但是在使用 RVCT2.2 编译器为 ARM11 编译时移植以下代码后出现错误,这是示例代码
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();
您遇到的问题是 std::map
的分配器需要一对
std::pair<const Key, T>
对了,你没有
pair<int*,list<int,allocator<int> > >
这不等于你没有Key
const 限定。应该是
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*
指向的值,而是比较地址。如果您需要前者,您需要编写自己的比较对象来执行此操作。