Boost logo

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