C++:ptr_multimap::insert 的问题

标签 c++ boost pointer-container

请考虑以下代码:

#include "boost/ptr_container/ptr_map.hpp"

int main()
{
        typedef boost::ptr_multimap<char, const int> M;
        M m;
        char c = 'c';
        int* j = new int(7);
        m.insert(c, j);
        return 0;
}

gcc 4.3.3 编译器无法编译上述代码。我插入非常量是不是做错了什么?我不能在多重映射中存储指向 const 的指针吗?

try.cpp: In function ‘int main()’:
try.cpp:8: error: expected primary-expression before ‘=’ token
/usr/include/c++/4.3/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = char, _U2 = const int*, _T1 = const char, _T2 = void*]’:
boost/boost_1_39_0/boost/ptr_container/ptr_map_adapter.hpp:765:   instantiated from ‘typename boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator, Ordered>::iterator boost::ptr_multimap_adapter<T, VoidPtrMultiMap, CloneAllocator, Ordered>::insert_impl(const typename boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator, Ordered>::key_type&, typename boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator, Ordered>::mapped_type) [with T = const int, VoidPtrMultiMap = std::multimap<char, void*, std::less<char>, std::allocator<std::pair<const char, void*> > >, CloneAllocator = boost::heap_clone_allocator, bool Ordered = true]’
boost/boost_1_39_0/boost/ptr_container/ptr_map_adapter.hpp:799:   instantiated from ‘typename boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator, Ordered>::iterator boost::ptr_multimap_adapter<T, VoidPtrMultiMap, CloneAllocator, Ordered>::insert(typename boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator, Ordered>::key_type&, typename boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap, CloneAllocator, Ordered>::mapped_type) [with T = const int, VoidPtrMultiMap = std::multimap<char, void*, std::less<char>, std::allocator<std::pair<const char, void*> > >, CloneAllocator = boost::heap_clone_allocator, bool Ordered = true]’
try.cpp:9:   instantiated from here
/usr/include/c++/4.3/bits/stl_pair.h:106: error: invalid conversion from ‘const void*’ to ‘void*’

我也尝试过,但在插入之前用 const casting j 失败了。

最佳答案

这似乎是问题所在。它在模板参数中没有 const 的情况下编译得很好。

关于C++:ptr_multimap::insert 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994619/

相关文章:

c++ - 不使用 Ctrl+Space 的 Netbeans 中的可变代码完成

C++,从网站获取文本

c++ - 优先队列倒序

c++ - 指向 boost 指针容器中元素的指针

c++ - 工作线程中的同步 ioctl 与异步 ioctl

c++ - 具有不同 C/C++ 运行时库的 exe 和 dll 之间的接口(interface)

c++ - boost::bind 到类成员函数

templates - 模板上的 begin() 和 end() 自由函数重载

c++ - 对 STL 容器中基类的 dynamic_cast 引用