Как вывести строку из функции void? - PullRequest
0 голосов
/ 03 ноября 2018

Я сделал функцию void и в настоящее время пытаюсь вывести результаты от передачи через нее строковой переменной, но эта ошибка возникает, и я не уверен, что она подразумевает. Я использовал этот код для вывода void-функций в прошлом, поэтому я не уверен, почему этот отличается. Ниже на строке, которая находится внутри цикла if, находится строка, которая является источником ошибки.

if(choice == 'r')
    {
        cout << "Edited text: " << replaceExclamation(a) << endl;

    }



void replaceExclamation(string usrStr)
{
    for(int i = 0; i < usrStr.length(); ++i )
    {
        if(usrStr.at(i) == '!')
        {
            usrStr.insert(i, ".");

        }
    }

}

/// Ошибка гласит: ошибка: нет совпадения для «оператора <<» (типы операндов: «std :: basic_ostream» и «void») </p>

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

В вашем коде модификация применяется к локальной переменной и не будет отражена в основной. Используйте передачу по ссылке так:

if(choice == 'r')
    {
        replaceExclamation(a); // Allow the variable to be modified before printing
        cout << "Edited text: " << a << endl;
    }

И

void replaceExclamation(string& usrStr ) // Pass parameter by reference
{
    for(int i = 0; i < usrStr.length(); ++i )
    {
        if(usrStr.at(i) == '!')
        {
            usrStr.insert(i, ".");    
        }
    }

}
0 голосов
/ 03 ноября 2018

void означает, что функция не возвращает никакого значения.

Следовательно, cout << "Edited text: " << replaceExclamation(a) << endl; неверно.

Чтобы написать так, вы должны изменить функцию, чтобы она возвращала значение string.

string replaceExclamation(string usrStr)
{
    for(int i = 0; i < usrStr.length(); ++i )
    {
        if(usrStr.at(i) == '!')
        {
            usrStr.insert(i, ".");

        }
    }
    return usrStr;
}
...