C++ 没有运算符“<<”匹配这些操作数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20939089/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
no operator "<<" matches these operands
提问by Evan Lemmons
No idea what's going on. I looked at other posts that are similar to this issue but no solution helped so far. Here's the code with comments by the parts giving errors. At one point it says that != doesn't work and in the rest of the code it's saying that << isn't working.
不知道发生了什么。我查看了与此问题类似的其他帖子,但到目前为止没有任何解决方案有帮助。这是带有错误部分注释的代码。在某一时刻,它说 != 不起作用,而在其余代码中,它说 << 不起作用。
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <cctype>
using namespace std;
//Hangman
int main()
{
//setup
vector<string> words;
words.push_back("GUITAR");
words.push_back("VIRGINIA");
words.push_back("LAPTOP");
words.push_back("WIFEY");
words.push_back("IPHONE");
srand(static_cast<unsigned int>(time(0))); //randomly select a word
random_shuffle(words.begin(), words.end());
const string THE_WORD = words[0];
const int MAX_WRONG = 8; //initialize wrong guesses
int wrong = 0;
string soFar(THE_WORD.size(), '-'); //initalize the word so far with dashes
string used = " "; //initalize letters used
cout << "Welcome to Hangman. Good luck!/n";
//game loop
//continues until a player guesses the word or gets too many wrong guesses
while ((wrong < MAX_WRONG) && (soFar != THE_WORD)) //ERROR on the "!="
{
cout << "\n\nYou have " << (MAX_WRONG - wrong) << " incorrect guesses left.\n";
cout << "\nYou've used the following letters:\n" << used << endl; //ERROR on "<<" between the string and used
cout << "\nSo far, the word is:\n" << soFar << endl; //ERROR on "<<" between the string and soFar
//recieve the player's guess
char guess;
cout << "\n\nEnter your guess: ";
cin >> guess;
guess = toupper(guess); //makes the guess uppercase since the secret word is uppercase
while (used.find(guess) != string::npos)
{
cout << "\nYou've already guessed " << guess << endl;
cout << "Enter your guess: ";
cin >> guess;
guess = toupper(guess);
}
used += guess;
if (THE_WORD.find(guess) != string::npos)
{
cout << "That's right! " << guess << " is in the word.\n";
//updated soFar to include newly guessed letter
for (int i=0; i < THE_WORD.length(); ++i)
{
if (THE_WORD[i] == guess)
{
soFar[i] = guess;
}
}
}
else
{
cout << "Sorry, " << guess << " isn't in the word.\n";
++wrong;
}
}
//shut down
if (wrong == MAX_WRONG)
{
cout << "\nYou've been hanged!";
}
else
{
cout << "\nYou guessed it!";
}
cout << "\nThe word was " << THE_WORD << endl; //ERROR on "<<" between the string and THE_WORD
int pause;
cin >> pause; //this is here just so my compiler will stay open so I can see what's going on
return 0;
}
回答by juanchopanza
If you want to use std::string
reliably, you must #include <string>
.
如果你想std::string
可靠地使用,你必须#include <string>
.
回答by Lightness Races in Orbit
You're not including the standard <string>
header.
您不包括标准<string>
标题。
You got [un]lucky that someof its pertinent definitions were accidentally made available by the other standard headers that you didinclude ... but operator<<
was not.
你很幸运,它的一些相关定义被你确实包含的其他标准头意外地提供了......但operator<<
没有。
回答by Brett
It looks like you're comparing strings incorrectly. To compare a string to another, use the std::string::compare
function.
看起来您正在错误地比较字符串。要将一个字符串与另一个字符串进行比较,请使用该std::string::compare
函数。
Example
例子
while ((wrong < MAX_WRONG) && (soFar.compare(THE_WORD) != 0))