Не могу использовать функцию void для преобразования строки в верхний регистр непосредственно в операторе if-c ++ - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть void func ниже:

void ToUppercase(std::string & data)
{
    transform(data.begin(), data.end(), data.begin(), (int(*)(int))toupper);
}

если я использую оператор if следующим образом:

if (ToUppercase(str).find("AAA") != string::npos) // Do something;

Это показывает мне ошибку "выражение должно быть типом класса". Почему я не могу использовать void func непосредственно в операторе if. Так или иначе, я не могу вернуть значение из функции ToUppercase.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

find() - это метод-член для класса std::string, но вместо этого вы возвращаете void. Измените код, чтобы он возвращал std::string, чтобы вы могли вызвать find() для возвращаемого значения.

0 голосов
/ 17 сентября 2018

Если ваш ToUppercase действительно не может вернуть новую строку, вы можете попробовать следующее:

ToUppercase(str);
if (str.find("AAA") != string::npos)
{
  ..
}
0 голосов
/ 17 сентября 2018

ToUppercase(str), как вы заявили, имеет тип void.Вы не можете вызывать оператора доступа члена (.) в void.

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

std::string & ToUppercase(std::string & data)
{
    transform(data.begin(), data.end(), data.begin(), (int(*)(int))toupper);
    return data;
}

Если вы настаиваете на возврате void по какой-то причине, ваш единственный допустимый вариант делать то, что вы делаете:

ToUUppercase(str);
if(str.find("AAA") != std::string::npos)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...