Я не понимаю эту ошибку c , но мне нужна помощь в ее исправлении

#c #function #c 11 #compiler-errors

#c #функция #c 11 #ошибки компилятора

Вопрос:

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

 **The error message**: lab4.cpp: In function ‘int NumWords(const stringamp;)’:
lab4.cpp:98:17: error: cannot bind ‘std::basic_istream<char>’ lvalue to ‘std::basic_istream<char>amp;amp;’
  while (inSS >> str) {
                 ^
In file included from /usr/include/c  /4.8.2/iostream:40:0,
                 from lab4.cpp:9:
/usr/include/c  /4.8.2/istream:872:5: error:   initializing argument 1 of ‘std::basic_istream<_CharT, _Traits>amp; std::operator>>(std::basic_istream<_CharT, _Traits>amp;amp;, _Tpamp;) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = const std::basic_string<char>]’
     operator>>(basic_istream<_CharT, _Traits>amp;amp; __is, _Tpamp; __x)
     ^
  
 #include <iostream>
#include <sstream>
#include <string>
using namespace std;
  

//Прототипы функций

 int NumWords(const stringamp;);

int NumNonWSCharacters(const stringamp;);

void CharReplace(stringamp;, char, char);

char PrintMenu();
  

// Основная функция

 int main () {

//Variables
string text;

//Input amp; Output original
cout << "Enter a line of text: ";
getline(cin, text);
cout << "n";
cout << "You entered: " << text << "n";

//How many words
cout << NumWords(text) << "n";

}
  

// Подсчитывает количество слов в строке

 int NumWords(const stringamp; str) {

int count = 0;
istringstream inSS(str);
while (inSS >> str) {

    count  ;

}
return count;

}
  

//Подсчитать количество символов (не включая пробелы) в строке

 int NumNonWSCharacters(const stringamp;) {

cout << "f";

}
  

//Заменяет один символ другим в заданной строке

 void CharReplace(stringamp;, char, char) {
cout << "FINISHn";

}
  

//Печатает меню

 char PrintMenu() {
cout << "FINISHn";

}
  

Комментарии:

1. str имеет постоянную квалификацию, вы не можете читать из inSS него.

2. Оператор извлечения >> будет записывать в строку str . Но это невозможно, если str есть const .

Ответ №1:

Ваша функция NumWords имеет проблему

 int NumWords(const stringamp; str) {

int count = 0;
istringstream inSS(str);
while (inSS >> str) {    // RIGHT HERE

    count  ;

}
return count;

}
  

Вы пытаетесь использовать параметр const, str , в качестве переменной, которая получает потоковый вывод inSS >> str . Поскольку это const , в inSS него невозможно записать. Это то, на что жалуется компилятор. Просто используйте временную переменную, чтобы обойти это.

 int NumWords(const stringamp; str) {

    int count = 0;
    istringstream inSS(str);
    std::string tmp;         // dummy string

    while (inSS >> tmp) {    // string into tmp
        count  ;
    }
    return count;
}
  

Кроме того, в ваших NumNonWSCharacters PrintMenu функциях и отсутствуют возвращаемые значения. Это должно быть легко исправить.