getline的C ++错误。如何避免此错误? “没有重载函数“ getline”的实例”

时间:2019-08-17 17:47:59

标签: c++ getline

我正在尝试制作一个包含用户名和密码的文本文件。我想通过将输入字符串与文本文件中的每一行进行比较来检查用户名是否已被占用。我正在使用getline,但收到此错误消息“没有重载函数“ getline”的实例与参数列表匹配”。

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

void RegisterUsername() {

string username0;
string username1;
string user;
ofstream myfile;
myfile.open("Data.txt", ios::app);

cout << "Please enter your username:\n";
cin >> username0;
cout << "Please reenter your username:\n";
cin >> username1;
if (username0 == username1) {
    myfile.open("Data.txt");
    if (myfile.is_open) {
        while (getline(myfile, user)) {
            if (username0 == user) {
                cout << "Username is taken. Please try again.";
                RegisterUsername();
            }
        }
    }

    myfile << username0 << "\n";
}
else {
    cout << "Usernames did not match. Please try again.\n";
    RegisterUsername();
};
myfile.close();
};



int main()
{   
RegisterUsername();
RegisterPassword();

cin.get();
};

1 个答案:

答案 0 :(得分:1)

getline函数需要一个istream和一个字符串,实际上您是在使用ofstream打开文件,但由于从文件中打开的任何内容,因此您无法从文件中读取任何内容。

您可以在if中使用ifstream

if (username0 == username1) {
    ifstream read_myfile ("Data.txt");

    if (read_myfile.is_open) {
        while (getline(read_myfile, user)) {
            if (username0 == user) {
                cout << "Username is taken. Please try again.";
                RegisterUsername();
            }
        }
    }

    read_myfile.close();

    myfile.open("Data.txt");

    myfile << username0 << "\n";
}