#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
функциях и отсутствуют возвращаемые значения. Это должно быть легко исправить.