|
Boost Users : |
From: e r (erwann.rogard_at_[hidden])
Date: 2007-08-13 19:23:26
hi,
i can build a map<int,A*>, but not a boost::ptr_map<unsigned int,A>.
could someone please help?
thank you,
e.
#include <boost/ptr_container/ptr_map.hpp>
using std::map;
using std::cout;
using std::endl;
class A{
public:
A(double x_):x(x_){};
const double x;
};
int main(){
map<int,A*> map_A; //cannot use map<int,A>
//because A() not defined
//why? because A has const members.
A a(0.0);
map_A[0]=new A(0.0);//fine
boost::ptr_map<unsigned int,A> ptr_map_A;
ptr_map_A[0]=new A(0.0);//not fine
return 0;
};
**** Build of configuration Debug for project testing_map ****
make -k all
Building file: ../main.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/local/boost_1_34_1 -O0 -g3 -Wall -c -fmessage-length=0 -MMD
-MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
../main.cpp:25:3: warning: no newline at end of file
../main.cpp: In function âint main()â:
../main.cpp:22: error: no match for âoperator=â in
âptr_map_A.boost::ptr_map<unsigned int, A, std::less<unsigned int>,
boost::heap_clone_allocator, std::allocator<std::pair<const unsigned
int, void*> > >::<anonymous>.boost::ptr_map_adapter<A, std::map<unsigned
int, void*, std::less<unsigned int>, std::allocator<std::pair<const
unsigned int, void*> > >,
boost::heap_clone_allocator>::<anonymous>.boost::ptr_container_detail::ptr_map_adapter_base<T,
VoidPtrMap, CloneAllocator>::operator[] [with T = A, VoidPtrMap =
std::map<unsigned int, void*, std::less<unsigned int>,
std::allocator<std::pair<const unsigned int, void*> > >, CloneAllocator
= boost::heap_clone_allocator](((const unsigned int&)((const unsigned
int*)(&0u)))) = (((A*)operator new(8u)), (<anonymous>->A::A(0.0),
<anonymous>))â
../header.h:4: note: candidates are: A& A::operator=(const A&)
/usr/local/boost_1_34_1/boost/ptr_container/ptr_map_adapter.hpp: In
member function âtypename
boost::ptr_container_detail::associative_ptr_container<boost::ptr_container_detail::map_config<T,
VoidPtrMap>, CloneAllocator>::reference
boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap,
CloneAllocator>::insert_lookup(const typename
boost::ptr_container_detail::associative_ptr_container<boost::ptr_container_detail::map_config<T,
VoidPtrMap>, CloneAllocator>::key_type&) [with T = A, VoidPtrMap =
std::map<unsigned int, void*, std::less<unsigned int>,
std::allocator<std::pair<const unsigned int, void*> > >, CloneAllocator
= boost::heap_clone_allocator]â:
/usr/local/boost_1_34_1/boost/ptr_container/ptr_map_adapter.hpp:268:
instantiated from âtypename
boost::ptr_container_detail::associative_ptr_container<boost::ptr_container_detail::map_config<T,
VoidPtrMap>, CloneAllocator>::reference
boost::ptr_container_detail::ptr_map_adapter_base<T, VoidPtrMap,
CloneAllocator>::operator[](const typename
boost::ptr_container_detail::associative_ptr_container<boost::ptr_container_detail::map_config<T,
VoidPtrMap>, CloneAllocator>::key_type&) [with T = A, VoidPtrMap =
std::map<unsigned int, void*, std::less<unsigned int>,
std::allocator<std::pair<const unsigned int, void*> > >, CloneAllocator
= boost::heap_clone_allocator]â
../main.cpp:22: instantiated from here
/usr/local/boost_1_34_1/boost/ptr_container/ptr_map_adapter.hpp:168:
error: no matching function for call to âA::A()â
../header.h:6: note: candidates are: A::A(double)
../header.h:4: note: A::A(const A&)
make: *** [main.o] Error 1
make: Target `all' not remade because of errors.
Build complete for project testing_map
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net