调用getline()没有匹配函数

时间:2018-04-29 20:21:07

标签: c++ fstream getline

所以我正在做一些事情,我似乎无法理解为什么它不起作用。

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&amp;,char [20],char)'

错误出现在getline的每一行!但不是“getline(fpd,seg);

这个东西不适用于MingW编译器,但正在我的大学系统上工作,idk也许他们有较旧的编译器,你能告诉我有什么问题。 非常感谢。

2 个答案:

答案 0 :(得分:0)

std::getline,如果这是您尝试使用的内容,则在<string>标头中定义。您需要包含它:

#include <string>

然后你可以通过std::getline来调用它。如果您厌倦了键入std::,则可以执行以下操作:

using namespace std;

根据IDE或构建设置,有时可以为您完成这些操作。这可能就是为什么它适用于学校的计算机,而不是你的计算机。

答案 1 :(得分:0)

错误消息表明代码正在尝试读取包含20个字符的数组。不幸的是std::getline没有处理字符数组。它只读入std::string,这就是它与string seg;一起使用的原因。对于字符数组,您需要使用std::istream::getlineLink to documentation page

但是,如果您可以使用std::string替换数据结构中的字符数组,那么生活可能会更容易。