“没有重载函数的实例'getline'..”

时间:2013-05-13 00:41:55

标签: c++ getline

部分代码:

string name;

    cin >> name;

    ifstream userFile( name + ".txt");
    if (userFile.good()){
      // read away
        cout << "Password? \n";

        string pw;

        cin >> pw;

        //checking if pw matches
        getline(userFile, 1);

所以我使用命名空间std并包含sstream字符串fstream iostream。 它说争论类型是(std :: ifstream,int)所以我在这里做错了什么?

编辑: 我认为第二个参数指的是你想读的哪一行。任何人都可以向我解释我如何以不同的方式选择我能阅读的行吗?

2 个答案:

答案 0 :(得分:0)

std::istream::getline引用,它没有采用ifstream对象和size_t的原型。

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

同样引自std::getline (string),它有以下内容:

  

istream的&安培; getline(istream&amp; is,string&amp; str,char delim);
     istream的&安培; getline(istream&amp;&amp; is,string&amp; str,char delim);
     istream的&安培; getline(istream&amp; is,string&amp; str);
     istream的&安培; getline(istream&amp;&amp; is,string&amp; str);

您以错误的方式使用getline。 如果您尝试使用getline从文件中读取行,可以尝试以下操作:

string currLine;
getline(userFile, currLine);
//do something with current line

答案 1 :(得分:0)

std::getline具有以下签名:

  

<强> std::getline

   template< class T, class U, class Allocator >
   std::basic_istream<T, U>& getline(std::basic_istream<T, U>& input,
                                       std::basic_string<T,U, Allocator>& str,
                                       CharT delim);

也就是说,它需要std::istreamstd::string的实例。此方法用于将流input的整行用于缓冲区str

这似乎不是您正在寻找的方法。您说您需要检查userFile是否与密码匹配。如果那时你应该试试这个:

std::string password;

userFile >> password // insert entire line into password

if (password == "1") // check if password is equal to 1
{
    ...
}