2012-06-18 3 views
1

공유 메모리에 저장된 boost :: interprocess :: map에 일부 값을 삽입하려고합니다.boost :: interprocess :: map insert includes : 오버로드 된 함수에 모호한 호출

문제는 내가 컴파일하려고 할 때 "과부하 된 함수에 대한 모호한 호출"을 주며 왜 그런지 모르겠습니다. 여기에 몇 가지 코드 조각은 다음과 같습니다

vcrtdserverimpl.cpp(445) : error C2668: 'boost::interprocess_container::map<Key,T,Pred,Alloc>::insert' : ambiguous call to overloaded function 
with 
[ 
     Key=VCRTDServer::KeyType, 
     T=VCRTDServer::ValueType, 
     Pred=std::less<VCRTDServer::KeyType>, 
     Alloc=VCRTDServer::ShmemAllocator 
] 
p:\lib\boost_1_39_0\boost\interprocess\containers\container\map.hpp(407): could be 'std::pair<_Ty1,_Ty2> boost::interprocess_container::map<Key,T,Pred,Alloc>::insert(const std::pair<char *,long> &)' 
with 
[ 
     _Ty1=boost::interprocess_container::containers_detail::rbtree<VCRTDServer::KeyType ,std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>,boost::interprocess_container::containers_detail::select1st<std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>>,std::less<VCRTDServer::KeyType>,VCRTDServer::ShmemAllocator>::iterator, 
     _Ty2=bool, 
     Key=VCRTDServer::KeyType, 
     T=VCRTDServer::ValueType, 
     Pred=std::less<VCRTDServer::KeyType>, 
     Alloc=VCRTDServer::ShmemAllocator 
] 
p:\lib\boost_1_39_0\boost\interprocess\containers\container\map.hpp(396): or  'std::pair<_Ty1,_Ty2> boost::interprocess_container::map<Key,T,Pred,Alloc>::insert(const std::pair<const Key,T> &)' 
with 
[ 
     _Ty1=boost::interprocess_container::containers_detail::rbtree<VCRTDServer::KeyType ,std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>,boost::interprocess_container::containers_detail::select1st<std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>>,std::less<VCRTDServer::KeyType>,VCRTDServer::ShmemAllocator>::iterator, 
     _Ty2=bool, 
     Key=VCRTDServer::KeyType, 
     T=VCRTDServer::ValueType, 
     Pred=std::less<VCRTDServer::KeyType>, 
     Alloc=VCRTDServer::ShmemAllocator 
] 
while trying to match the argument list '(std::pair<_Ty1,_Ty2>)' 
with 
[ 
     _Ty1=char *, 
     _Ty2=int 
] 

사람이 어떤 아이디어가 있습니까 :

#include <boost/interprocess/containers/map.hpp> 
#include <boost/interprocess/allocators/allocator.hpp> 
#include <boost/interprocess/managed_shared_memory.hpp> 

typedef char * KeyType; 
typedef long ValueType; 
typedef std::pair<const char *, long> Type_Value; 

typedef boost::interprocess::allocator<Type_Value, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator; 
typedef boost::interprocess::map<KeyType, ValueType, std::less<KeyType>, ShmemAllocator> MyMap; 


... 

MyMap * myMap = segment.construct<MyMap>("CyValoresRTD")  //object name 
         (std::less<char *>() //first ctor parameter 
         ,alloc_inst);  //second ctor parameter 

... 
char * text = "some text"; 
long value = 1234; 
myMap->insert(std::make_pair(text, value)); 

이 삽입 호출이 나에게 약간의 오차가 있습니다?

+1

문제와 관련이 있는지는 모르지만'map '의 실제'value_type'은'pair '이 아닌'pair '입니다. 나는. 'Type_Value' typedef가 올바르지 않습니다. – ildjarn

+0

팁 주셔서 감사합니다! 불행히도 이것은 문제가 아니 었습니다. =) – George

답변

1

오류 메시지는 문제를 알려줍니다.

could be ... 
::insert(const std::pair<char *,long> &)' 

or .... 
::insert(const std::pair<const Key,T> &)' 

while trying to match the argument list '(std::pair<_Ty1,_Ty2>)' 
      with 
      [ 
        _Ty1=char *, 
        _Ty2=int 
      ] 

std::map 키는 삽입하기위한 쌍이므로 const입니다. std::string을 키로 사용하는 것이 좋습니다.

+0

고마워요! 그 트릭을 했어! std :: string을 사용하여 해결되었습니다. – George