2012-07-11 3 views
3

실패 :벡터 지우기 방법이 코드에서

/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/../../Generic/CoreObjects/GCVVector.h: In member function âTP GCVVector<TP>::Remove(long int) [with TP = GCVString]â: 
/trnuser1/rmtrain/DevelopmentEnv/Generic/ModulePopulator/GCVMPState.cpp:69: instantiated from here 
/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/../../Generic/CoreObjects/GCVVector.h:241: error: no matching function for call to âstd::vector<GCVString, std::allocator<GCVString> >::erase(long int&)â 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:110: note: candidates are: typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >) [with _Tp = GCVString, _Alloc = std::allocator<GCVString>] 
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/vector.tcc:122: note:     typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::erase(__gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >, __gnu_cxx::__normal_iterator<typename std::_Vector_base<_Tp, _Alloc>::_Tp_alloc_type::pointer, std::vector<_Tp, _Alloc> >) [with _Tp = GCVString, _Alloc = std::allocator<GCVString>] 
make[2]: *** [CMakeFiles/GCVMP.dir/trnuser1/rmtrain/DevelopmentEnv/Generic/ModulePopulator/GCVMPState.o] Error 1 
make[1]: *** [CMakeFiles/GCVMP.dir/all] Error 2 

사람이 내가 데이터를 제거 할 방법을 알고 있습니까 :

template <class TP> TP GCVVector<TP>::Remove(long Index) 
{ 

    TP Result = m_ObjectList.at(Index); 

    m_ObjectList.erase(&m_ObjectList.at(Index)); 

    return Result; 
} 

내가 컴파일시 오류가 무엇입니까?

답변

8

std::vector::erase의 단일 인수 버전은 반복자를 기대하고, 당신은 요소의 주소를 전달한다.

올바른 요소를 제거하려면 해당 벡터에 유효한 이터레이터를 전달해야합니다. m_ObjectList.begin()을 사용하고 증가분을 합산하여 std::advance을 사용하여 증가분을 구성 할 수 있습니다.

m_ObjectList.erase(std::advance(m_ObjectList.begin(), Index)); 
6
m_ObjectList.erase(m_ObjectList.begin() + Index);