Функция об устранении ошибки компиляции гласных - PullRequest
0 голосов
/ 04 апреля 2019

Итак, я писал функцию для удаления всех гласных в строке, и я продолжал получать эту ошибку:

pa07.cpp:138:39: error: non-const lvalue reference to type     'std::string'
(aka 'basic_string<char>') cannot bind to a value of unrelated type
'const char [12]'
cout << csutilities::removeVowels("Hello wOrld") << endl;
                                  ^~~~~~~~~~~~~
pa07.cpp:110:39: note: passing argument to parameter 'str' here
std::string removeVowels(std::string& str)

Я не совсем понимаю, если кто-то может объяснить это, поэтому яне буду делать это снова, это было бы удивительно.Спасибо за любую помощь!

std::string removeVowels(std::string& str)
{
    string newWord = "";

    for(unsigned int x = 0; x < str.length(); x++)
    {
        if (str[x] == ('A') || str[x] == ('a') ||
            str[x] == ('E') || str[x] == ('e') ||
            str[x] == ('I') || str[x] == ('i') ||
            str[x] == ('O') || str[x] == ('o') ||
            str[x] == ('U') || str[x] == ('u'))
            newWord = newWord + "";
        else
            newWord = newWord + str[x];
    }//for statement to determine vowel
    return newWord;
}//function to remove vowels 

Нужно просто удалить гласные в строке, спасибо за ваше время.

1 Ответ

0 голосов
/ 04 апреля 2019
csutilities::removeVowels("Hello wOrld");

эквивалентно:

csutilities::removeVowels(std::string("Hello wOrld"))

Строковый литерал неявно преобразуется в std::string путем создания временного объекта.Временные объекты не могут быть переданы функциям, использующим неконстантные ссылки.

У вас есть несколько вариантов решения этой проблемы:

  1. Вы никогда не модифицируете str, поэтому просто сделайте это const.
  2. Если вы хотите изменить str, но вызывающий не должен знать, что вы изменили его, просто удалите ссылку, str в функции будет тогда копиейисходная строка
  3. Если вы хотите сохранить str в качестве неконстантной ссылки, вам нужно создать невременный объект для передачи в removeVowels.Например:

    std::string str("Hello wOrld");
    csutilities::removeVowels(str);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...