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

(Solved)Problem z klasą dziedziczącą po klasach sf::transformable/sf::drawable(SFML)

Object Storage Arubacloud
0 głosów
1,644 wizyt
pytanie zadane 1 czerwca 2016 w C i C++ przez KlataMiLata Bywalec (2,120 p.)
edycja 6 czerwca 2016 przez KlataMiLata

Zacząłem ostatnio próbować swoich sił w bibliotece SFML. Jako pomocy używam kursów z bloga szymonsiarkiewicz.pl. Mój problem polega na tym, że mam dwie klasy Player i Engine. Klasa Player dziedziczy od klas sf::drawable i sf::transformable. Może będzie prościej jak napiszę definicje tej klasy: 

#include <SFML/Graphics.hpp>
class Player :public sf::Drawable,
	sf::Transformable
{
	sf::Texture texture;
	sf::Sprite sprite;
	void draw(sf::RenderTarget &target, sf::RenderStates states) const;
public:
	Player();
	~Player();
};

Oraz jak wcześniej wspomniałem mam też klasę Engine, która posiada obiekt klasy player.

#include "Player.h"
class Engine
{
	Player player;
	bool being_on = 0;
public:
	Engine(sf::RenderWindow &);
	~Engine();
	void start(sf::RenderWindow &);
};

Kompilator wyrzuca mi błąd

.

Solved. Rozwiązaniem problemu w tym przypadku było zapisanie dwóch klas w jednym pliku.

komentarz 2 czerwca 2016 przez Łukasz Hamowski Nowicjusz (100 p.)
edycja 31 października 2018 przez Łukasz Hamowski
Ttt
komentarz 2 czerwca 2016 przez niezalogowany
No tak tak, nie jezt czysto wirtualna. Czyli że nie ma sensu, żeby tam stał przydomek virtual? Kto będzie dziedziczył to dziedziczył? Hm, dziwne trochę, bym musiał to sprawdzić. OK, na dzisiaj chyba temat zamknięty.
komentarz 3 czerwca 2016 przez KlataMiLata Bywalec (2,120 p.)
Dzięki wszystkim za wlaczenie się w dyskusję. Jakby komuś jeszcze przyszło coś do glowy proszę o komentarz.
komentarz 3 czerwca 2016 przez niezalogowany
@filipekczek7 Wyobraź sobie, że mnie nie było. Nie siedzę na tym forum cały czas.
komentarz 3 czerwca 2016 przez niezalogowany
Ja też, tylko że wydawało mi się to mało możliwe, żebyś mi dwa razy nie odpowiedział na pytanie.

3 odpowiedzi

+2 głosów
odpowiedź 1 czerwca 2016 przez C☺ndzi Stary wyjadacz (12,100 p.)

Zapomniałeś dopisać public przy class Player, powinno być:
 

class Player :public sf::Drawable,
    public sf::Transformable

Może pomoże :). 

komentarz 1 czerwca 2016 przez KlataMiLata Bywalec (2,120 p.)
Niestety nic się nie zmienia. Z tego co wiem to nie miało znaczenia bo przez domniemanie była przyjmowana wartość private.
komentarz 2 czerwca 2016 przez C☺ndzi Stary wyjadacz (12,100 p.)
A jak usuniesz dziedziczenie po sf::Transformable to nadal ten błąd się pojawia?
komentarz 2 czerwca 2016 przez KlataMiLata Bywalec (2,120 p.)
Tak :<
komentarz 2 czerwca 2016 przez C☺ndzi Stary wyjadacz (12,100 p.)
Czyli pewnie trzeba nadpisać jakąś metodę, sprawdź jak to wygląda u innych / w dokumentacji.
+2 głosów
odpowiedź 1 czerwca 2016 przez MetGang Nałogowiec (34,360 p.)
Ach ten Visual i jego zrozumiałe komunikaty. GCC wywala jaśniejszą odpowiedź.

Player();
~Player();

Nie posiadają ciała funkcji i kompilator nie może utworzyć obiektu o danym typie.
komentarz 1 czerwca 2016 przez C☺ndzi Stary wyjadacz (12,100 p.)
No tak, jakby robił kreatorem klas to by mu się stworzył pusty konstruktor i destruktor i by nie było problemu.
komentarz 1 czerwca 2016 przez KlataMiLata Bywalec (2,120 p.)
Konstruktory posiadają ciało. Na razie są puste, bo staram się znaleźć błąd w programie.
komentarz 2 czerwca 2016 przez Łukasz Hamowski Nowicjusz (100 p.)
edycja 31 października 2018 przez Łukasz Hamowski
...
komentarz 2 czerwca 2016 przez niezalogowany
Błąd byłby wtedy calkowicie inny.
komentarz 2 czerwca 2016 przez KlataMiLata Bywalec (2,120 p.)
Używam tej dyrektywy, ale uznałem, żę wstawianie jej do kodu podpiętego pod ten temat jest niepotrzebny. Tak czy inaczej w swoim projekcie używam tej dyrektywy i to w żaden sposób nie rozwiązuje problemu.
0 głosów
odpowiedź 2 czerwca 2016 przez niezalogowany
edycja 2 czerwca 2016
Po pierwsze, metoda draw() powinna być wirtualna i const, czyli virtual void draw(argumenty)const. Po drugie, podaj proszę linie, w których są te błędy.
komentarz 2 czerwca 2016 przez niezalogowany

A czy ty znasz SFML-a?

Tak, znam. Po prostu  zwróciłem uwagę że metoda draw już jest wirtualna. Ale teraz widzę, że edytowałeś i dodałeś(bo chyba tego wcześniej nie było?), że musi być stała i tu się zgadzam.

komentarz 2 czerwca 2016 przez niezalogowany
Tak, bo po przejrzeniu drugiego linka, którego napisałem, przypomniałem sobie o tym, że ta metoda powinna być const, więc to trochę moja wina :)
komentarz 2 czerwca 2016 przez niezalogowany
A jaka jest różnica pomiędzy const, a nie-const metodą wirtualną? W tym przypadku, czyli metodą draw() SFML-a.
komentarz 2 czerwca 2016 przez niezalogowany
Jeśli obiekt jest const to jakakolwiek metoda wywoływana na rzecz tego obiektu też musi być const. Nie ma żadnej różnicy między non-const metodą wirtualną i const(no może oprócz sygnatur).
komentarz 2 czerwca 2016 przez niezalogowany
No, to to wiem, ale dlaczego akurat metoda draw() z SFML-a ma być const? Bo w końcu po tym, jak zauważyłeś, że napisałem o tym, że ma być jeszcze const, to powiedziałeś, że teraz się zgadzasz.

Podobne pytania

0 głosów
1 odpowiedź 493 wizyt
0 głosów
1 odpowiedź 137 wizyt

92,584 zapytań

141,433 odpowiedzi

319,668 komentarzy

61,966 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...