尝试为类做一个项目,但不断得到错误:没有重载函数的实例匹配与行向量的实现相关的参数列表。特别突出的区域是。 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);
}
}
答案 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 );
}