Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

TigerClaw25

unregistriert

1

16.11.2013, 23:13

C++ Vererbung

Hallo,
hab eine Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef GameObject
#define GameObject

#include <iostream>
#include "SDL.h"
#include "SDL_image.h"
#include <string>

using namespace std;

class GameObject
{
public:
    void draw() { std::cout << "draw game object"; }
    void update() { std::cout << "update game object"; }
    void clean() { std::cout << "clean game object"; }
    
protected:
    int m_x;
    int m_y;
};

#endif /* defined(GameObject) */


UNd folgende soll erben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef Player
#define Player

#include "GameObject.h"
#include <iostream>
#include <string>


class Player : public GameObject {
public:
    void draw()
    {
        GameObject::draw();
        std::cout << "draw player";
    }

    void update()
    {
        std::cout << "update player";
        m_x = 10;
        m_y = 20;
    }
    
    void clean()
    {
        GameObject::clean();
        std::cout << "clean player";
    }
};

#endif /* defined(Player) */


leider zeigt er mir an, dass in der zweite Klasse Player beispielsweise bei der Klammer"{" ein Bezeichner erwartet wird. "" GameObject::draw(); wird auch als Fehler unterstrichen. Hat jemand einen Tipp?

FSA

Community-Fossil

  • Private Nachricht senden

2

16.11.2013, 23:16

C-/C++-Quelltext

1
2
3
4
5
void draw()
    {
        GameObject::draw();
        std::cout << "draw player";
    }

Oh da ist aber einiges schief gelaufen. Ich glaube was du machen willst, ist die Funktionen in GameObject virtual zu machen und sie in der Playerklasse zu überschreiben.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

16.11.2013, 23:17

Stichwort virtual?
Im Fall von C++11 am besten auch gleich noch das Schlüsselwort override.

Edit: FSA-Ninja just owned me.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

4

16.11.2013, 23:37

Wurde im Buch so angegeben. Der Kompiler meldet aber schon vorher einen Fehler bei class Player : public GameObject bei der ersten Klammer.

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

5

17.11.2013, 00:41

Welches Buch ist das wenn ich fragen darf?
WIP Website: kevinheese.de

Tobiking

1x Rätselkönig

  • Private Nachricht senden

6

17.11.2013, 01:31

Das Problem sind die Defines in den Include Guards. Ein Define sagt dem Präprozessor das er eine Textersetzung durchführen soll. Bei dir wird praktisch jedes "Player" und "GameObject" in deinem Code entfernt. Da kommt dann natürlich nur Müll raus.

Bzgl. virtual vermute ich mal das die Methoden hinterher über ein Player Objekt aufgerufen werden sollen und später virtual dazu kommt. Dann ist das so durchaus legitim als Buchbeispiel.

TigerClaw25

unregistriert

7

17.11.2013, 08:29

Danke, das hatte ich auch vermutet und genau daran lag es auch. Habe diese einfach umbenannt.

@ Keks: Das Buch heißt SDL Game Development, habs als eBook

FSA

Community-Fossil

  • Private Nachricht senden

8

17.11.2013, 10:50

Und dennoch solltest du es nicht so lernen. Virtual und override sind deine beiden Stichwörter. ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veraltet strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

17.11.2013, 12:29

Na ja, es geht so ja auch. Nur wäre das eben nicht polymorph.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TigerClaw25

unregistriert

10

17.11.2013, 16:12

Muss doch noch etwas los werden. Im oben genannten Buch wird zwar Schritt für Schritt alles gezeigt und alter Code durch neuen ersetzt, aber oftmals nicht gezeigt, welche Teile wieder gelöscht werden sollen. Jedenfalls bin ich momentan an einem Punkt, wo ich nur Fehler bekomme und nicht mehr weiter komme. Daher versuche ich es selbst auf einfache Weise zu programmieren und hoffe so auch schneller zu lernen. ...

Vielleicht gehe ich aber auch alles viel zu schnell an und sollte mich eher darauf konzentrieren selber etwas auf die Beine zu stellen :D Gamestates etc sind für Anfänger nun wirklich nicht einfach :) Daher mache ich mit dem youtube Tutorial weiter :) Es ist sehr einfach gehalten, der Redner arbeitet mit Konstruktoren zur Initialisierung und auch sonst werden Kollision etc behandelt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »TigerClaw25« (17.11.2013, 16:35)


Werbeanzeige