LInux g++;Visual Studio正常运行时向量迭代器上的编译器错误 我在Visual Studio 2017企业中成功编译了C++文件分配程序,没有问题。然而,当我尝试在使用GCC4.8.5的Red Hat Linux服务器上编译相同的程序时,我会遇到一些错误,这些错误困扰着我正在使用的向量/迭代器。这是嵌套结构和我的向量使用的类型: struct FATPtr { string filename; int fileByte; bool operator< (const FATPtr& other) const // overloaded < operator to compare two FAT pointers; { // comparison is by filename return filename < other.filename; } bool operator< (const string& fname) const // overloaded < operator to compare FAT pointer filename { // to another filename return filename < fname; } }; FATPtr fatPtr; // pointer to a file allocation table entry vector<FATPtr> fatVector; // vector to hold these pointers

LInux g++;Visual Studio正常运行时向量迭代器上的编译器错误 我在Visual Studio 2017企业中成功编译了C++文件分配程序,没有问题。然而,当我尝试在使用GCC4.8.5的Red Hat Linux服务器上编译相同的程序时,我会遇到一些错误,这些错误困扰着我正在使用的向量/迭代器。这是嵌套结构和我的向量使用的类型: struct FATPtr { string filename; int fileByte; bool operator< (const FATPtr& other) const // overloaded < operator to compare two FAT pointers; { // comparison is by filename return filename < other.filename; } bool operator< (const string& fname) const // overloaded < operator to compare FAT pointer filename { // to another filename return filename < fname; } }; FATPtr fatPtr; // pointer to a file allocation table entry vector<FATPtr> fatVector; // vector to hold these pointers,c++,visual-studio,vector,iterator,g++,C++,Visual Studio,Vector,Iterator,G++,具体而言,“at”迭代器在向量插入和擦除方法中抛出错误: {cslinux1:~/CS4348/Project3} g++ -std=c++0x Project3.cpp -o Project3 Project3.cpp: In member function ‘void DiskInterface::addFAT(Disk&, std::string, int, int)’: Project3.cpp:248:29: error: no matching function for ca

具体而言,“at”迭代器在向量插入和擦除方法中抛出错误:

{cslinux1:~/CS4348/Project3} g++ -std=c++0x Project3.cpp -o Project3
Project3.cpp: In member function ‘void DiskInterface::addFAT(Disk&, std::string, int, int)’:
Project3.cpp:248:29: error: no matching function for call to ‘std::vector<DiskInterface::FATPtr>::insert(__gnu_cxx::__normal_iterator<const DiskInterface::FATPtr*, std::vector<DiskInterface::FATPtr> >&, DiskInterface::FATPtr&)’
  fatVector.insert(at, fatPtr);
{cslinux1:~/CS4348/Project3}g++-std=c++0x Project3.cpp-o Project3
Project3.cpp:在成员函数“void DiskInterface::addFAT(Disk&,std::string,int,int)”中:
Project3.cpp:248:29:错误:调用“std::vector::insert(_gnu\u cxx::_normal\u迭代器&,DiskInterface::FATPtr&)”时没有匹配的函数
fatVector.insert(at,fatPtr);

GCC 4.8.5无法处理
std::vector::insert
std::vector::erase
()中的常量迭代器:

将调用更改为
cbegin()
cend()
begin()
end()

您的代码可以在更高版本中编译


看起来像是@UncleBens points()。

谢谢你,事实上,@A.A,更改成功了,我非常感谢你的推荐!
{cslinux1:~/CS4348/Project3} g++ -std=c++0x Project3.cpp -o Project3
Project3.cpp: In member function ‘void DiskInterface::addFAT(Disk&, std::string, int, int)’:
Project3.cpp:248:29: error: no matching function for call to ‘std::vector<DiskInterface::FATPtr>::insert(__gnu_cxx::__normal_iterator<const DiskInterface::FATPtr*, std::vector<DiskInterface::FATPtr> >&, DiskInterface::FATPtr&)’
  fatVector.insert(at, fatPtr);
auto at = lower_bound(fatVector.begin(), fatVector.end(), filename);