Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量擦除方法失败_C++_Gcc - Fatal编程技术网

C++ 向量擦除方法失败

C++ 向量擦除方法失败,c++,gcc,C++,Gcc,在此代码中: template <class TP> TP GCVVector<TP>::Remove( long Index ) { TP Result = m_ObjectList.at( Index ); m_ObjectList.erase( &m_ObjectList.at( Index ) ); return Result; } 模板TP GCVVector::删除(长索引) { TP Result=m_ObjectLi

在此代码中:

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

    TP Result = m_ObjectList.at( Index );

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

    return Result;
}
模板TP GCVVector::删除(长索引) { TP Result=m_ObjectList.at(索引); m_ObjectList.erase(&m_ObjectList.at(Index)); 返回结果; } 我遇到编译时错误:

/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
/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/../../Generic/CoreObjects/GCVVector.h:在成员函数-TP-GCVVector::Remove(long int)[with-TP=GCVString]
/trnuser1/rmtrain/DevelopmentEnv/Generic/ModulePopulator/GCVMPState.cpp:69:从此处实例化
/trnuser1/rmtrain/DevelopmentEnv/Telstra/USM/./../Generic/CoreObjects/GCVVector.h:241:错误:没有匹配的函数用于调用–std::vector::erase(long int&)函数
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../../../include/c++/4.1.2/bits/vector.tcc:110:注意:候选项是:typename std::vector::iterator std::vector::erase(u gnu_cxx::u normal_uiterator)[带Tp GCVString,Alloc=std::分配器]
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../../../../../../include/c++/4.1.2/bits/vector.tcc:122:注意:typename std::vector::iterator std::vector::vector::erase(u gnu cxx::u normal_u迭代器,u gnu cxx:u normal_u迭代器)[with u Tp=GCVString,u Alloc=std::分配器]
make[2]:***[CMakeFiles/GCVMP.dir/trnuser1/rmtrain/DevelopmentEnv/Generic/ModulePopulator/GCVMPState.o]错误1
生成[1]:***[CMakeFiles/GCVMP.dir/all]错误2

有人知道如何删除数据吗?

的单参数版本需要一个迭代器,而您正在传递一个元素的地址

m_ObjectList.erase(m_ObjectList.begin() + Index );
要删除正确的元素,需要为该向量传递有效的迭代器。您可以使用
m_ObjectList.begin()
构造一个增量,或者通过使用将增量相加来构造增量

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