在stl_tree.h中与operator ++不匹配,即使我没有更改它

时间:2018-02-02 18:50:14

标签: c++ dictionary stl

我的代码在main.cpp中没有错误地工作,但突然间,我收到了这个错误:

/opt/lintula/gcc/include/c++/5.2.0/bits/stl_tree.h:2223: error: no match for ‘operator++’ (operand type is ‘std::__cxx11::basic_string<char>’)
  for (; __first != __last; ++__first)
                            ^

我没有触及stl_tree.h,为什么会发生错误?当我不知道从哪里开始时,我该如何调试这些问题?

这是代码,我试图以形式读取和插入数据 name:指向std :: map

#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <fstream>

using namespace std;

int main()
{
   map<string, string> piste_hakemisto;
   string input_tiedosto;
   cout << "Input file: ";
   cin >> input_tiedosto;
   ifstream tiedosto_olio(input_tiedosto);
   if (not tiedosto_olio){
       cout << "Error! The file " << input_tiedosto << " cannot be opened.";
       return EXIT_FAILURE;
   }
   string nimi;
   string pisteet;
   string rivi;
   while( getline(tiedosto_olio, rivi)){
       getline(tiedosto_olio, rivi);
       int erotin_indeksi = rivi.find(":");
       nimi = rivi.substr(0, erotin_indeksi);
       pisteet = rivi.substr((erotin_indeksi));
       piste_hakemisto = {nimi, pisteet};
   }

}

1 个答案:

答案 0 :(得分:2)

通常您从添加的最后一段代码开始。我猜的是这个

piste_hakemisto = {nimi, pisteet};

那应该是

piste_hakemisto.insert({nimi, pisteet});

(其他方式也可以做同样的事情)。

这是模板的常见问题,错误消息通常很模糊,并且在模板定义的深处引用代码。