繁体   English   中英

当Visual Studio运行良好时,矢量迭代器上的LInux G ++编译器错误

[英]LInux g++ compiler errors on vector iterator when Visual Studio runs just fine

我已经在Visual Studio 2017 Enterprise上成功编译了C ++文件分配程序,没有任何问题。 但是,当我尝试在具有GCC 4.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    

这是生成错误的代码:

    // insert FAT filename and location into sorted vector
fatPtr.filename = filename;
fatPtr.fileByte = fatByte;
auto at = lower_bound(fatVector.cbegin(), fatVector.cend(), filename);
fatVector.insert(at, fatPtr);

void DiskInterface::deleteFATEntry(Disk& dsk, string filename, int entry)
{
    auto at = lower_bound(fatVector.cbegin(), fatVector.cend(), filename);
    fatVector.erase(at);

    dsk.writeFAT(entry);
}

具体来说,“ 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);

GCC 4.8.5无法在std::vector::insertstd::vector::erase处理const迭代器( GNU C ++库手册-1.1实施状态-23.3.6 ):

更改您的通话cbegin()cend()begin()end()

auto at = lower_bound(fatVector.begin(), fatVector.end(), filename);

您的代码在以后的版本中可以正常编译。

看起来像语言标准中的缺陷,如@UncleBens点( Container插入/擦除和迭代器constness(修订1))N2350 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM