Почему возникает ошибка, когда я пытаюсь проверить, является ли переменная-член (строка) в классе пустой? - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над проектом и мне нужно проверить одну из переменных члена моего класса, чтобы убедиться, что пользователь действительно ввел строку.

Я также пытался использовать (patronName == '') и (patronName == ""), но не повезло.

Редактировать: Использование "\ n" исправляет ошибку, но программа завершается, не позволяя пользователю ввести имя.

std::string Restaurant::getPatronName()
{
     bool controlFlag = true;
do
{
    getline(std::cin,patronName);

    if ((std::cin.fail()) || (patronName == '\n'))  
    {
        std::cout << "You must enter a name!" << std::endl;
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else
    {
        controlFlag = false;
    }
} while (controlFlag);

return patronName;
}

Функция должна прочитать и сохранить имя, введенное пользователемв patronName.При попытке собрать, я получаю сообщение об ошибке «нет соответствия для оператора ==».Может быть, это потому, что объект, вызываемый в main, является указателем типа Restaurant?

Ответы [ 3 ]

1 голос
/ 05 апреля 2019

Помимо несоответствия типов между символом '\n' и std::string patronName, мы можем найти в https://en.cppreference.com/w/cpp/string/basic_string/getline, что std::getline(input, str, delim);

Извлекает символы из ввода и добавляет их к str до тех пор, пока […] следующий доступный символ ввода не будет delim, […], в этом случае символ-разделитель извлекается из ввода, но не добавляется до str.

Так что не будет никакого символа '\n', если delim - это символ новой строки, в первую очередь.

Вы можете использовать std::basic_string::empty(), чтобы проверить, является ли строка пустой.

0 голосов
/ 05 апреля 2019

Вы должны написать patronName == "\n", потому что вы не можете сравнить строку и символ

0 голосов
/ 05 апреля 2019

Что происходит с '\n', так это то, что вы сравниваете строку с символом, который, я подозреваю, для этого случая не определен оператор ==.Если вы уверены, что строка не пуста, вы можете вызвать operator [] formerName[0], который возвращает символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...