Przeciążanie operatora

0

Z headera

#include <iostream>
#include <istream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>

using namespace std;
class Game
{
    private:
    int pick;
    bool Menu;

    Entity *Wiz;
    Entity *War;
    Entity *War2;
    Entity *Wiz2;

    public:
    Game();
    ~Game();

    void Fight(Entity *Me, Entity *Enemy);

    void StartGame();

    friend istream& operator>>(istream &input ,Game &mypick);

};

Z pliku cpp

    std::istream& Game::operator>>(istream &input ,Game &mypick)
    {
        cout<<"dzialam";
        input.clear();
        input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        input>>mypick.pick;
        return input;
    }

|error: 'std::istream& Game::operator>>(std::istream&, Game&)' must take exactly one argument|

Co robie nie tak?

0

Po usunięciu Game:: przez operatorem kod sie kompiluje ale nie wiem czy dziala jak trzeba bo cout sie nie wyswietla da sie jakos to zweryfikowac?

3

Idiomatyczny istream>> nie ma być funkcją klasy, tylko funkcją wolną. Deklaracja friend istream& operator>>(istream &input ,Game &mypick); właśnie taką deklaruje.

    std::istream& /*Game::*/operator>>(istream &input ,Game &mypick)
    {
        cout<<"dzialam";
        input.clear();
        input.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        input>>mypick.pick;
        return input;
    }

W temacie: https://dsp.krzaq.cc/post/304/jak-przeladowywac-operatory-w-mojej-klasie/

1 użytkowników online, w tym zalogowanych: 0, gości: 1