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

DarioFrodo

Treue Seele

  • »DarioFrodo« ist der Autor dieses Themas

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

1

25.03.2012, 17:16

[gelöst] Problem mit Vererbung und puren virtuellen Funktionen, error: cannot allocate an object of abstract type 'SolarSystemSektor'

Ich benutze MinGW unter Windows und Visual Studio 2008, beide liefern dieselbe Fehlermeldung.

Ich habe eine Basis Klasse, welche folgendermaßen deklariert ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class DRIResource
{
public:
    virtual ~DRIResource() {}
    virtual const char* getResourceType() const = 0;
    virtual bool less_than(DRIResource& b) const = 0;
protected:
};


Davon abgeleitet ist diese Klasse hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Sektor : public DRIResource
{
public:
    Sektor();
    virtual ~Sektor();
    
    virtual const char* getResourceType() const {return "Sektor";}
    virtual bool less_than(Sektor& b) const {return mID < b.mID;}
};


Soweit ist noch alles okay.
Nun habe ich eine Klasse, die wiederum davon abgeleitet wird:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class SolarSystemSektor : public Sektor
{
public:
    SolarSystemSektor();
    virtual ~SolarSystemSektor();
    
    virtual bool less_than(SolarSystemSektor& b) {return Sektor::less_than(b);}

};


Wo ich nun eine neue Instanz dieser Klasse mit new erzeugen will,
kommt dann dieser Compilerfehler:
MinGW:
error: cannot allocate an object of abstract type 'SolarSystemSektor'
SolarSystemSektor.h:2: note: because the following virtual functions are pure within 'SolarSystemSektor':
DRIResource.h: note: virtual bool DRIResource::less_than(DRIResource&) const

Visual Studio:
error C2259: 'SolarSystemSektor': Instanz von abstrakter Klasse kann nicht erstellt werden
2> aufgrund folgender Member:
2> "bool DRIResource::less_than(DRIResource &) const": ist abstrakt
2> DRIResource.h(43): Siehe Deklaration von 'DRIResource::less_than'

Dabei habe ich doch die Funktion in SolarSystemSektor deklariert.. (ganz davon abgesehen das sie das auch schon
in der Sektor Klasse ist).
Was stimmt da nicht? Könnt ihr mir einen Hinweis geben?
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DarioFrodo« (25.03.2012, 18:15)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

25.03.2012, 17:18

Die Parameter müssen vom gleichen Typ sein.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

25.03.2012, 17:27

Genau. Um die Funktion korrekt benutzen zu können müsstest du vermutlich mit einem typeof arbeiten. So macht man es zumindest bei Java. Es wird einfach die Basisklasse übergeben und dann geguckt ob die übergebene Instanz vom Typ der gewünschten Klasse ist. Sollte bei C++ denke ich auch so funktionieren.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

25.03.2012, 17:48

SolarSystemSektor::lessthan ist außerdem nicht mehr const und damit keine Überschreibung der Basisfunktion mehr, sondern eine eigenständige Funktion, die das less_than der Basisklasse nur verdeckt.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

DarioFrodo

Treue Seele

  • »DarioFrodo« ist der Autor dieses Themas

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

5

25.03.2012, 18:14

Das const hatte ich rausgenommen zum testen, ob es vielleicht ohne geht. Aber ob mit oder ohne const, die Fehlermeldung bleibt gleich.

Tatsächlich, also doch der gleiche Typ.
Ich dachte eigentlich, das hätte ich probiert, mir war nämlich auch so. Aber das hatte ich wohl vergessen.
Vielen Dank für eure schnelle Hilfe :)
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

25.03.2012, 20:01

Mal was ganz anderes, wo genau ist der semantische Sinn von

SolarSystem1.less_than(SolarSystem2) ?
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]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

25.03.2012, 20:12

Sagt doch eigentlich der Name schon oder nicht? Was ist daran für dich grad nicht verständlich?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

idontknow

unregistriert

8

25.03.2012, 20:32

naja SolarSystem1 "kleiner als" SolarSystem2... ich mein ich frag mich auch wofür man das braucht bzw inwiefern das an der Stelle Sinn macht..

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

9

25.03.2012, 20:35

Kommt doch auf das Projekt und die Anforderungen an. An sich finde ich so eine Funktion nicht verwunderlich. Vielleicht sollen die Sonnensysteme nach Größe geordnet werden. Vielleicht auch etwas anderes;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

26.03.2012, 07:07

Sie werden ja nicht mal nach Größe geordnet, denn das würde ich ja erwarten (auch wenn ich solche eine Methode eher nicht als Teil eines Sonnensystems sehe und die Methode dann eher "smaller_than" heißen sollte), sondern es werden Ressourcen-IDs verglichen.
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]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (26.03.2012, 07:32)


Werbeanzeige