2015-12-10 2 views
0

пытается сделать проект для класса, но продолжать получать ошибку: никакой экземпляр перегруженной функции не соответствует списку аргументов, относящемуся к реализации вектора строк. область, которая специально выделена, - это. оператора перед push_back и вставить.нет экземпляра перегруженной функции

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

Кажется, вы пытаетесь вставить 'int' в' std :: vector '. Это вряд ли будет успешным. –

+0

Вы искали, как использовать функции 'push_back' и' insert'? – immibis

+0

Я не думаю, что вы хотите «ломать», если 'in.fail()' - Я думаю, вы хотите «вернуться». – erip

ответ

1

Ваш компилятор правильно: нет перегрузки std::vector<std::string>::push_back, который принимает int, так как std::vector<std::string> магазины std::string с, не int сек.

Совершенно не понятно, из какого кода вы пытаетесь сделать это, из-за множества ошибок, но начните с замены своего звонка на что-то разумное.

1

Там нет способа вставки с двумя параметрами типа станд :: строка, как вы пытаетесь вызвать

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

Идея состоит в том, что я должен сделать функцию, которая читает строки в документе, а затем сохраняет строки в векторе, но мне трудно понять, как добавить отдельные строки к вектору – forresto

+0

. она никогда ничего не говорила о том, что строки имеют разные операторы, чем int для этого контекста. – forresto

+0

@forresto См. мое обновленное сообщение. –