Там нет способа вставки с двумя параметрами типа станд :: строка, как вы пытаетесь вызвать
rows.insert(prevLine, line);
Также не ясно, что вы пытаетесь сделать в этом заявлении.
Edit: После обновлен Йор код, тем не менее, этот 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);
}
Кажется, вы пытаетесь вставить 'int' в' std :: vector '. Это вряд ли будет успешным. –
Вы искали, как использовать функции 'push_back' и' insert'? – immibis
Я не думаю, что вы хотите «ломать», если 'in.fail()' - Я думаю, вы хотите «вернуться». – erip