Vraag geen operator "<<" komt overeen met deze operanden [duplicaat]


Deze vraag heeft hier al een antwoord:

Geen idee wat er aan de hand is. Ik heb gekeken naar andere berichten die vergelijkbaar zijn met dit probleem, maar tot nu toe heeft geen enkele oplossing geholpen. Hier is de code met opmerkingen van de onderdelen die fouten geven. Op een gegeven moment zegt het dat! = Niet werkt en in de rest van de code zegt hij dat << niet werkt.

#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;
}

15
2018-01-05 20:58


oorsprong


antwoorden:


Als je wilt gebruiken std::string betrouwbaar moet u dat doen #include <string>.


39
2018-01-05 21:02



Je neemt de standaard niet mee <string> header.

Je hebt geluk dat sommige van zijn pertinente definities werden per ongeluk beschikbaar gemaakt door de andere standaard headers die u deed omvatten ... maar operator<< was niet.


9
2018-01-05 21:04



Het lijkt erop dat u strings verkeerd vergelijkt. Gebruik de. Om een ​​string met een andere te vergelijken std::string::compare functie.

Voorbeeld

     while ((wrong < MAX_WRONG) && (soFar.compare(THE_WORD) != 0)) 

-3
2018-01-05 21:04