"<objekt>": Unbekannter Überschreibungsspezifierer [C++ | Visual Studio Community]?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der Compiler kennt nur, was er schon gesehen hat.

Du nutzt in Game Difficulty, ohne daß der Compiler es kennt.

Also ziehst Du die Klasse Difficulty besser vor die Klasse Game.

----

Ordne das mal insgesamt entsprechend neu, das sollte schon einiges eleminieren.

Dann schauen wir uns den Rest an.

Nachtrag: Je nach Bedarf kannst Du auch Forward Declarations nutzen, aber eien Grundordnung in Hinsicht auf die Abhängigkeiten ist trotzdem sinnvoll.

EmptyVoid 
Fragesteller
 09.03.2020, 13:18

Alles klar, vielen Dank für den Hinweis. Ich werde diese Änderungen baldmöglichst vornehmen.

0
KarlRanseierIII  09.03.2020, 13:22
@EmptyVoid

Und gewöhne Dir bitte gleich an, die Schnittstellenbeschreibung von der Implementierung abzutrennen.

D.h. Du schreibst eine leere class, mit Informationen über die Methoden und Member, implementierst sie aber nicht.

Wenn Du die Beschreibungen entsprechend sortiert, können die Klassen sich gegenseitig nutzen. Die Implementierung der Methoden kannst Du dann getrennt sonstwo und auch kunterbunt machen (kunterbunt=nicht zu empfehlen), ohne daß es zu Problemem wegen unbekannter Typen o.ä. kommt.

2
KarlRanseierIII  09.03.2020, 13:30
@EmptyVoid
class Game {
private:
    bool active;
    Difficulty difficulty = Difficulty("descption", 1); 
public:
    // Get and set private values.
        // active
    bool getGameStatus();
    void setGameStatus(bool active);
        // difficulty
    Difficulty getDifficulty();
};

//Impl.:

bool Game::getGameStatus() { return active;}

Game::setGameStatus( bool active){ this->active=active;}

Difficulty Game::getDifficulty(){return difficulty;}

Man 'entkernt' die Klasse praktisch weitgehend. Dadurch wird es leichter Header+Unit zu erstellen und auch die (Kreuz)refernzierungen machen weniger Probleme.

Die einzelnen Definitionen der Methoden sind so auch besser unabhängig zu betrachten.

1
EmptyVoid 
Fragesteller
 10.03.2020, 22:15
@KarlRanseierIII

Die Fehler wurden durch diese Neuanordnung aufgelöst. Den hier angegebenen Hinweis habe ich insofern berücksichtigt, als dass ich mich entschieden habe, die Klassen in eigene Dateien eigens jeweils für jede Klasse auszulagern.

Vielen Dank nochmals.

0

Ich kenne mich mit C++ wenig aus, doch kann es sein, dass du schlicht die Klassen deklarieren musst, bevor du sie verwendest?

So, wie das in folgendem Link gemacht wird:

https://en.cppreference.com/w/cpp/language/class

EmptyVoid 
Fragesteller
 09.03.2020, 13:10

Wenn ich sie noch mal extra deklariere, gibt mit der Compiler aus, dass bei "Klasse_A a = A();" "Klasse_A" kein Typname wäre.

0