C++ 没有重载函数的实例

C++ 没有重载函数的实例,c++,vector,operator-keyword,ifstream,C++,Vector,Operator Keyword,Ifstream,试图为类执行一个项目,但不断出现错误:重载函数的任何实例都不匹配与行向量实现相关的参数列表。特别突出显示的区域是。操作员在推回并插入之前 void holdLines(ifstream in, vector<string> rows) { string line; string prevLine; vector<string> rows; int lineNumber = 0; int vectorNumber = 0; while(true)

试图为类执行一个项目,但不断出现错误:重载函数的任何实例都不匹配与行向量实现相关的参数列表。特别突出显示的区域是。操作员在推回并插入之前

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);
  }
}

您正试图传递一个整数,以便在需要字符串时将_推回。 看起来局部变量行的名称与参数行的名称相同。
编译器是正确的:不存在接受int的std::vector::push_back重载,因为std::vector存储std::string,而不是int


由于错误众多,仅从代码本身就不清楚您要做什么,但首先要用合理的方法替换push_-back调用。

在您尝试调用时,没有插入两个std::string类型参数的方法

rows.insert(prevLine, line);
同样,在这份声明中,你想做什么也不清楚

编辑:更新您的代码后,此statemenet

rows.push_back(lineNumber);
这也是错误的,因为行被声明为字符串的向量。它不是int的向量,而且类std::string没有合适的构造函数

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

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

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 );
}

似乎您尝试在std::vector中插入int。这不太可能成功。您是否查看了如何使用push_back和insert函数?我认为如果in.fail,您不希望中断-我认为您希望返回。使用两个std::string参数也不会导致insert过载。插入的位置参数是一个迭代器。其思想是我应该创建一个函数,读取文档中的行,然后将这些行存储在向量中,但是我很难弄清楚如何在向量中添加单独的行。问题是她从来没有说过在这个上下文中字符串的运算符与int不同
  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 );
}