我不理解这个c++错误,但我需要帮助修复它

I do not understand this c++ error but I need help fixing it

本文关键字:帮助 不理解 c++ 错误      更新时间:2024-09-27

我正试图编写一个计算给定字符串中单词数的函数,但每次编译代码时都会收到错误消息。

**The error message**: lab4.cpp: In function ‘int NumWords(const string&)’:
lab4.cpp:98:17: error: cannot bind ‘std::basic_istream<char>’ lvalue to ‘std::basic_istream<char>&&’
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>& std::operator>>(std::basic_istream<_CharT, _Traits>&&, _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = const std::basic_string<char>]’
operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
^
#include <iostream>
#include <sstream>
#include <string>
using namespace std;

//功能原型

int NumWords(const string&);
int NumNonWSCharacters(const string&);
void CharReplace(string&, char, char);
char PrintMenu();

//主要功能

int main () {
//Variables
string text;
//Input & 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 string& str) {
int count = 0;
istringstream inSS(str);
while (inSS >> str) {
count++;
}
return count;
}

//计算字符串中的字符数(不包括空白(

int NumNonWSCharacters(const string&) {
cout << "f";
}

//将给定字符串中的一个字符替换为另一个字符

void CharReplace(string&, char, char) {
cout << "FINISHn";
}

//打印菜单

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

您的NumWords函数出现问题

int NumWords(const string& str) {
int count = 0;
istringstream inSS(str);
while (inSS >> str) {    // RIGHT HERE
count++;
}
return count;
}

您正试图使用const参数str作为接收inSS >> str流输出的变量。由于它是const,inSS无法写入它。这就是编译器所抱怨的。只需使用一个临时变量就可以解决这个问题。

int NumWords(const string& str) {
int count = 0;
istringstream inSS(str);
std::string tmp;         // dummy string
while (inSS >> tmp) {    // string into tmp
count++;
}
return count;
}

此外,NumNonWSCharactersPrintMenu函数缺少返回值。这应该是一个简单的解决方案。