C++重载函数getline的示例与参数列表不匹配

6l7fqoea  于 2023-02-26  发布在  其他
关注(0)|答案(3)|浏览(185)

我正在写一个程序,需要把cin的输入读入字符串。当我尝试使用常规的getline(cin,str)它不停地提示输入,而且从来没有移动到下一行代码,所以我看了一下我的教科书,它说我可以将一个cstring和字符串的大小以cin.getline的形式传递给getline(str,SIZE)。然而,当我这样做时,我得到了错误“重载函数getline的示例与参数列表不匹配。
我四处寻找,但我发现的都是人们说要使用getline(cin,str)形式,这导致了无限的输入提示,或者建议在我包含的类中可能有两个不同的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(如果相关)

kqlmhetl

kqlmhetl1#

这是一个错误的行:

char* cName[SIZE];

你真正需要的是:

char cName[SIZE];

然后,您应该能够用途:

cin.getline(cName, SIZE);
0wi1tuuw

0wi1tuuw2#

这个来自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;
}
czq61nw1

czq61nw13#

与R Sahu的答案相关,编译器给出了参数不匹配的线索。尝试下面的代码,它不会给出错误,并使错误信息更清楚。

#include <iostream>

    class someClass {
    public:
        void LogError(char* ptr) {
            std::cout << "LogError: before arg=" << ptr << "\n";
            ptr[0] = 0;
            std::cout << "LogError: after arg=" << ptr << "\n";
        }
        void LogError(char* ptr) const {
            std::cout << "const LogError: arg=" << ptr << "\n";
        }
        void ROFunction(char* ptr) const {
            LogError(ptr);
        }
        void RWFunction(char* ptr) {
            LogError(ptr);
        }
    };
    int main()
    {
        char s[] = "test";
        someClass obj;
        obj.ROFunction(s);
        obj.RWFunction(s);
        obj.ROFunction(s);
        return 0;
    }

输出为:

const LogError: arg=test
LogError: before arg=test
LogError: after arg=
const LogError: arg=

相关问题