使用带有int的getline时如何解决“没有重载函数“ getline”的实例与参数列表匹配”

时间:2019-04-23 12:23:30

标签: c++

我目前正在处理分配,并且正在尝试使用try catch错误处理来检查用户输入是否为有效的int。

我目前有这个:

int inputValidation() {
    int e = 0;
    std::string es;
    bool check = false;
    do {
        try {
            if (!getline(std::cin, e)) {
                throw stringInput;
            }
            else {
                check = true;
            }
        }
        catch (std::exception& er) {
            std::cout << "Error! " << er.what() << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
    } while (!check);
    return e;
}

我的问题是if ((getline(std::cin, e))){}部分。我也尝试过使用std::cin.getline(e, 256)

调用函数时,我正在使用以下循环:

do {
        std::cout << "Please select a month: ";
        selectedMonth = inputValidation();
    } while (selectedMonth < 1 || selectedMonth >(12 - actualMonth));

这只是确保他们只能输入从当前月份到12月的一个月份。

我知道我可以使用es代替e,但是这违背了错误检查的目的。我唯一想到的就是检查转换。

无论出于什么原因,我似乎都收到错误消息“没有重载函数“ getline”的实例”,并且不确定我要去哪里。如果有人能提供一些见识,我将非常感激。

2 个答案:

答案 0 :(得分:0)

如果std::cin >> e不适合,则可以使用istringstream

std::string asText;

std::getline(cin,asText);

std::istringstream iss (asText);

if (iss >> e)

答案 1 :(得分:0)

我设法将其更改为:

int inputValidation(std::string message) {
    int e = NULL;
    std::string es;
    bool check = false;
    do {
        try {
            std::cout << message;
            getline(std::cin, es);
            if (!atoi(es.c_str())) {
                throw stringInput;

            }
            else {
                e = atoi(es.c_str());
                check = true;
            }
        }
        catch (std::exception& er) {
            std::cout << "Error! " << er.what() << std::endl;
        }
    } while (!check);
    return e;
}
//In another function -->
    do {
        selectedMonth = inputValidation("Please select a month: ");
    } while (selectedMonth < 1 || selectedMonth >(12 - actualMonth));