no instance of overloaded function

感情迁移 提交于 2019-12-13 08:59:23

问题


trying to do a project for class, but keep getting the error: no instance of overloaded function matches argument list relating to the implementation of the rows vector. the area that is specifically highlighted is the . operator before push_back and 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);
  }
}

回答1:


You are trying to pass an integer to push_back when a string is required. It also looks like your local variable "rows" is named the same as your parameter "rows". http://www.cplusplus.com/reference/vector/vector/push_back/




回答2:


Your compiler is correct: there is no overload of std::vector<std::string>::push_back that accepts an int, because a std::vector<std::string> stores std::strings, not ints.

It's quite unclear from code alone what you are trying to do, due to the myriad mistakes, but start by replacing your push_back call with something sensible.




回答3:


There is no method insert with two parameters of type std::string as you are trying to call

rows.insert(prevLine, line);

Also it is not clear what you are trying to do in this statement.

Edit: After you updated yor code nevertheless this statemenet

rows.push_back(lineNumber);

also is wrong because the rows is declared as a vecto of strings. It is not a vector of int and moreover class std::string does not have an appropriate constructor.

But in any case the function does not make sense because you declared a local variable with the same name as the second parameter and tried to fill this local vector that will be deleted after exiting the function

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

I think the function should be declared either like

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

or like

vector<string> holdLines(ifstream in);

Take into account that instead of this statements

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

you could write

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

If you need simply to fill the vector that is passed as the argument then the function can look the following way

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

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


来源:https://stackoverflow.com/questions/34213619/no-instance-of-overloaded-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!