нет соответствующей функции для вызова getline () - PullRequest
0 голосов
/ 29 апреля 2018

так что я работаю над чем-то, и я не могу понять, почему это не работает.

void display_alls()
{
    ifstream fpd;
    fpd.open("student2.txt",ios::in);
    if(!fpd)
    {
        cout<<"ERROR!!! FILE COULD NOT BE OPEN ";
        getch();
        return;
    }
    while(fpd)
    {   
        int pos;
        string seg;

        cout<<"\tUSN"<<setw(10)<<"\tName"<<setw(20)<<"Book Issued\n";
        //fp.seekg(pos,ios::beg);

        getline(fpd,st.usn,'|');
        getline(fpd,st.name,'|');
        getline(fpd,st.email,'|');
        getline(fpd,st.phone,'|');
        getline(fpd,st.stbno,'|');
        getline(fpd,seg);

        cout<<"\t"<<st.usn<<setw(20)<<st.name<<setw(10)<<st.stbno<<endl;
    }
    fp.close();
}

[Ошибка] D: \ library \ library_v1.cpp: 514: ошибка: нет подходящей функции для вызов `getline (std :: ifstream &, char [20], char) '

ошибка в каждой строке с getline! но не в "getline(fpd,seg);"

эта штука не работает на компиляторе MingW, но работала на моей системе колледжа, idk, возможно, у них более старый компилятор, подскажите, пожалуйста, что не так. высоко ценится.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

В сообщении об ошибке указывается, что код пытается прочитать массив из 20 символов. К сожалению, std::getline не работает с массивами символов. Он только читает std::string, поэтому он работает с string seg;. Для массивов символов вам нужно использовать std::istream::getline. Ссылка на страницу документации

Однако жизнь, вероятно, будет проще для вас, если вы сможете заменить массивы символов в структуре данных на std::string s.

0 голосов
/ 29 апреля 2018

std::getline, если это то, что вы пытаетесь использовать, определено в заголовке <string>. Вы хотите включить его:

#include <string>

Тогда вы можете позвонить через std::getline. Если вам надоело набирать std::, вы можете сделать:

using namespace std;

В зависимости от IDE или настроек сборки, эти вещи иногда могут быть выполнены для вас. Возможно, именно поэтому это работает на школьном компьютере, но не на вашем.

...