没有重载函数的实例

时间:2015-12-10 23:24:33

标签: c++ vector operator-keyword ifstream

尝试为类做一个项目,但不断得到错误:没有重载函数的实例匹配与行向量的实现相关的参数列表。特别突出的区域是。 push_back和insert之前的运算符。

void holdLines(ifstream in, vector<string> rows) {
  string line;
  string prevLine;
  vector<string> rows;
  int lineNumber = 0;
  int vectorNumber = 0;

  while(true) {
    getline(in, line);
    if(in.fail()) {
      break;
    }
    lineNumber++;
    vectorNumber = lineNumber - 1;
    rows.push_back(lineNumber);
    rows.insert(prevLine, line);
  }
}

3 个答案:

答案 0 :(得分:1)

当您需要字符串时,您正尝试将整数传递给push_back。 它看起来也像你的本地变量&#34;行&#34;命名与参数&#34; rows&#34;相同。 http://www.cplusplus.com/reference/vector/vector/push_back/

答案 1 :(得分:1)

您的编译器是正确的:std::vector<std::string>::push_back没有接受int的重载,因为std::vector<std::string>存储std::string,而不是int

由于存在无数错误,仅从代码中就不清楚你要做什么,但首先用明智的事情替换你的push_back电话。

答案 2 :(得分:1)

当您尝试调用

时,没有方法插入带有两个std :: string类型的参数
rows.insert(prevLine, line);

同样不清楚你在这个陈述中想要做什么。

编辑:在更新了yor代码之后,这个statemenet

rows.push_back(lineNumber);

也是错误的,因为rows被声明为字符串的vecto。它不是int的向量,而且类std :: string没有合适的构造函数。

但是在任何情况下该函数都没有意义,因为您声明了一个与第二个参数同名的局部变量,并尝试填充退出函数后将被删除的本地向量

void holdLines(ifstream in, vector<string> rows) {
                            ^^^^^^^^^^^^^^^^^^
  string line;
  string prevLine;
  vector<string> rows;
  ^^^^^^^^^^^^^^^^^^^^
  //..

我认为该函数应该声明为

void holdLines(ifstream in, vector<string> &rows);
                                          ^^^

或喜欢

vector<string> holdLines(ifstream in);

考虑到而不是这些陈述

  while(true) {
    getline(in, line);
    if(in.fail()) {
      break;
    }
    //...
你可以写

while ( getline( in, line ) )
{
    //...

如果您只需要填充作为参数传递的向量,那么该函数可以采用以下方式

void holdLines( std::ifstream &in, std::vector<std::string> &rows )
{
    std::string line;

    while ( std::getline( in, line ) ) rows.push_back( line );
}