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