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

1

21.03.2014, 10:55

Klassen und Vererbung

Hallo zusammen

Folgendes Problem:

Angenommen ich habe folgende Klasse:

C-/C++-Quelltext

1
2
3
class A
{
}


und dann noch eine die von der class A vererbt:

C-/C++-Quelltext

1
2
3
class B : public A
{
}


und ich will nun mit einer neuen Klasse auf die class B ebenfalls vererben, dann scheint es so nicht zu gehen (?):

C-/C++-Quelltext

1
2
3
class C : public B
{
}


Kann mir jdm. helfen? Danke!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

21.03.2014, 10:57

Könntest du etwas detaillierter beschreiben, was du genau du erreichen willst und wofür du meinst, das zu brauchen? Ich könnte mir vorstellen, dass virtuelle Basisklassen das sind, was du suchst, aber so ganz ist mir nicht klar, worauf du hinauswillst...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

21.03.2014, 10:59

Ich vermute mal er hat irgendwo einen Compile-Fehler, weil ein Semikolon fehlt oder ein Import oder so.
Aber ohne konkret zu wissen was "es geht nicht" heißen soll, kann man hier schlecht helfen.
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]

4

21.03.2014, 11:03

Danke für die Antworten. Ist etwas viel Code (falls notwendig trag ich denn nach).
Sorry, der Compilerfehler bei

C-/C++-Quelltext

1
2
3
class C : public B
{
}


ist "Expected class name".

** EDIT: Hier doch der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class GameObject
{
    
public:
    virtual void draw()=0;
    virtual void update()=0;
    virtual void clean()=0;
    
protected:
    GameObject (const LoaderParams *pParams) {}
    virtual ~GameObject() {}
    
};


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
class SDLGameObject : public GameObject
{
public:

    SDLGameObject (const LoaderParams *pParams);
    
    virtual void draw();
    virtual void update();
    virtual void clean();
    
    protected:
    
    Vector2D m_position;
    Vector2D m_velocity;
    Vector2D m_acceleration;
    int m_width;
    int m_height;
    int m_currentRow;
    int m_currentFrame;
    string m_textureID;
    
};


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MenuButton : public SDLGameObject
{
    public:
    MenuButton(const LoaderParams *pParams);
    
    virtual void draw();
    virtual void update();
    virtual void clean();
    
    private:
    enum button_state
    {
        MOUSE_OUT = 0,
        MOUSE_OVER = 1,
        MOUSE_CLICKED = 2
    };
};

Tankard

Treue Seele

Beiträge: 192

Beruf: Student, Hardware- und Softwareentwicklung als wissenschaftliche Hilfskraft

  • Private Nachricht senden

5

21.03.2014, 11:09

Header eingebunden?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

21.03.2014, 11:11

Ok, wenn ich das richtig verstehe, ist dein Problem, dass der Compiler bei class MenuButton : public SDLGameObject sagt "Expected class name"!? Hast du vor der Definition von MenuButton auch den passenden Header für SDLGameObject inkludiert? Wenn SDLGameObject an der Stelle nicht bekannt ist, kannst du natürlich auch nicht davon ableiten...

7

21.03.2014, 11:18

Danke für die Antworten. Ja Header ist drin:

C-/C++-Quelltext

1
#include "SDLGameObject.hpp"


Ich habe gerade bemerkt, dass es funktioniert wenn ich

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MenuButton : public SDLGameObject
{
    public:
    MenuButton(const LoaderParams *pParams);
    
    virtual void draw();
    virtual void update();
    virtual void clean();
    
    private:
    enum button_state
    {
        MOUSE_OUT = 0,
        MOUSE_OVER = 1,
        MOUSE_CLICKED = 2
    };
};


In der gleichen Header-Datei von SDLGameObject habe. Aber ich will ja zwei getrennte Dateien. Das macht irgendwie keinen Sinn für mich ...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

21.03.2014, 11:23

Ok, dann ist es wohl der typische Fehler: Du verwendest Include Guards und hast Header, die sich gegenseitig Inkludieren...

9

21.03.2014, 11:27

Das könnte gut sein, ich habe im Verlauf des Projektes etwas die Übersicht verloren hinsichtlich der Includes.
Was heisst dies konkret? Wie löse ich das Problem?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

21.03.2014, 11:28

Am besten generell keine zirkulären Abhängigkeiten verwenden oder wenn, dann mit Forward Declarations arbeiten statt mit einem Include.
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]

Werbeanzeige