C ++没有重载函数getline的实例匹配参数列表

时间:2014-04-06 04:59:55

标签: c++ visual-studio-2012

我正在编写一个程序,需要将cin的输入读入字符串。当我尝试使用常规getline(cin,str)时,它无休止地提示输入,并且从未移动到下一行代码。所以我查看了我的教科书,它说我可以将cstring和字符串的大小以cin.getline(str,SIZE)的形式传递给getline。但是,当我这样做时,我得到错误“没有重载函数getline的实例匹配参数列表。

我四处搜索,但是我发现所有人都说使用getline(cin,str)形式导致无限输入提示,或者建议在类I中可能有两个不同的getline函数和不同的参数包括,我需要告诉IDE使用正确的(我不知道该怎么做)。

这是我在文件开头包含的内容:

#include <string>
#include <array>
#include <iostream>
#include "stdlib.h"
#include "Bank.h"   //my own class

using namespace std;

这是代码的相关部分:

        const int SIZE = 30; //holds size of cName array
        char* cName[SIZE];   //holds account name as a cstring   (I originally used a string object in the getline(cin, strObj) format, so that wasn't the issue)
        double balance;      //holds account balance

        cout << endl << "Enter an account number: ";
           cin >> num;       //(This prompt works correctly)
        cout << endl << "Enter a name for the account: ";
           cin.ignore(std::numeric_limits<std::streamsize>::max()); //clears cin's buffer so getline() does not get skipped   (This also works correctly)
           cin.getline(cName, SIZE); //name can be no more than 30 characters long   (The error shows at the period between cin and getline)

我正在使用Visual Studio C ++ 2012,如果那是相关的

2 个答案:

答案 0 :(得分:2)

来自visual studio的此错误消息非常具有误导性。实际上对我来说,我试图从const成员函数调用非const成员函数。

class someClass {
public:
    void LogError ( char *ptr ) {
        ptr = "Some garbage";
    }
    void someFunction ( char *ptr ) const { 
        LogError ( ptr );
    }
};
int main ()
{
    someClass obj;
    return 0;
}

答案 1 :(得分:1)

这是违规行:

char* cName[SIZE];

你真正需要的是:

char cName[SIZE];

然后,您应该可以使用:

cin.getline(cName, SIZE);