• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z klasą C++

VPS Starter Arubacloud
+1 głos
341 wizyt
pytanie zadane 20 czerwca 2015 w C i C++ przez Wiciorny Ekspert (269,120 p.)

Otóż mam taki problem, że wyskakuje mi błąd.  " player was not declared in the scope"

 

otóż  mam taki kod : 

w pliku Class.h mam cos takiego // fragment 

class Game : public virtual Interaction, public Pozycja
{
    public:

    Pozycja player;
    vector<Pozycja> enemy;
    int wynik, liczba_enemy;
    Game(): liczba_enemy(0), wynik(0), przegrana(true)
    {
    // pozycja gracza na start
        player.x = 0;
        player.y = 0;
    }
    bool przegrana;
    bool Lose();
    void make(){};
    void gameStatus();
    void createEnemy(int numer);
    vector<Pozycja>& return_referenceEnemy();
    void podnies_wynik();
    void player_move();
    void enemy_move();
    Pozycja& return_referencePlayer();
};



Oraz tutaj 
definicje mam w pliku funkcje cpp; więc używam tam 

// fragment 

Pozycja&  return_referencePlayer()
{

return player;  // TUTAJ JEST BŁĄD 

}

 

dlaczego nie zauważa ... zę player jednak należy do klasy Game, gdzie jest obiektem Pozycji? Jak robiłem to wszystko bez podziału na pliki .h .cpp/ to działało ? Jakaś sugestia co wpisać? 

5 odpowiedzi

+2 głosów
odpowiedź 20 czerwca 2015 przez Radfler VIP (101,030 p.)

A gdzie operator zakresu? Przecież to jest funkcja składowa! ;)

Pozycja&  Game::return_referencePlayer() {
 
    return player;  // TUTAJ JEST BŁĄD 
}
+1 głos
odpowiedź 20 czerwca 2015 przez draghan VIP (106,230 p.)

Dziedziczysz po klasie Pozycja i wrzucasz Pozycja jako element składowy? To ma jakiś głębszy sens? ;D

Jeśli return_referencePlayer jest metodą klasy Game, to powinieneś to zapisać tak:

Pozycja& Game::return_referencePlayer()
{
 
return player;  // TUTAJ JEST BŁĄD 
 
}

 

0 głosów
odpowiedź 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Wpisz return Game::player;

To powinno rozwiązać problem :)
komentarz 20 czerwca 2015 przez Wiciorny Ekspert (269,120 p.)
zauważ, że w clasie Game, mam napisane  Pozycja player, a Pozycja też jest klasą.

Klasa Game dziedziczy po klasie Pozycja- i robiąc Game::player- mam błąd  invalid use of non static data member Game::player.
komentarz 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)

A sama metoda nie powinna mieć okreśonego do jakiej klasy należy?

Pozycja&  Game::return_referencePlayer();

Strzelam, bo niestety na tym skrawku kodu nie da się potestować :)

Pozdrawiam!

0 głosów
odpowiedź 20 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)

Może pomoże takie coś:

Pozycja&  Game::return_referencePlayer()
{
 
return &player;
 
}

?

Jak nie to spróbuj takie coś:

return &Game::player;

Jeśli dalej masz błąd to spróbuj jeszcze takie coś:

Pozycja player();
komentarz 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Żeby zwrócić adres nie trzeba przy return wstawiać ampersanda :)
komentarz 20 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
Wiem.

ampersanda się stosuje do typy danych prostych.

Ale warto spróbować.
komentarz 20 czerwca 2015 przez daan Pasjonat (17,640 p.)
co oznacza stwierdzenie, że ampresanda stosuje się do prostych typów danych ? & używa się w konkretnych miejsach w konkretnym celu, a jeżeli funkcja zwraca referencje do obiektu, nie możesz użyć & przy return :P
komentarz 20 czerwca 2015 przez Dorion300 Szeryf (90,250 p.)
A ciekawe.

Może póżniej przetestuję.
0 głosów
odpowiedź 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Swoją drogą dodawanie do klasy obiektu innej klasy jest to tak zwana metoda kompozycji i nie wymaga ona dziedziczenia z tej klazy :)

Podobne pytania

0 głosów
3 odpowiedzi 572 wizyt
0 głosów
2 odpowiedzi 280 wizyt
pytanie zadane 11 maja 2020 w C i C++ przez wojownikseo Początkujący (260 p.)
0 głosów
2 odpowiedzi 294 wizyt
pytanie zadane 27 października 2017 w C i C++ przez Kurczak Użytkownik (940 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...