Klasse als Datentyp
-
Hallo zusammen.
Warum funktioniert folgendes nicht:
Hier eine x-beliebige Klasse
class Klasse{ ... };
Danach schließlich in einer anderen Klasse
class andereKlasse{ andereKlasse(Klasse einPaarKlassen[]);
Mit einem Vector von Klassen geht das auch nicht
Die Fehlermeldung lautet:
error C2061: Syntaxfehler : Bezeichner 'Planet'
Vielen Dank im Voraus
-
bobei Planet natürlich in meinem Beispiel der class Klasse entspricht
-
das klappt so.
mach mal das beispiel so, daß es ne vollständige c++-datei ist, die wir testen können.
-
OK. Die Klasse Galaxy soll einen vector mit Planeten enthalten der mittels konstruktor initialisiert wird. Hier der Header und die .cpp:
#include "Galaxy.h" class Galaxy { private: char* galaxyName; int numberOfPlanets; vector<Planet>* planets; public: Galaxy(char* initialName, int initialNumberOfPlanets, vector<Planet>* initialPlanets) { galaxyName = initialName; numberOfPlanets = initialNumberOfPlanets; planets = initialPlanets; } int getNumberOfPlanets() { return numberOfPlanets; } char* getGalaxyName() { return galaxyName; } }; //hier der header #include <string> #include <vector> #include "Planet.h" using namespace std; Galaxy(char* initialName, int initialNumberOfPlanets, vector<Planet>* initialPlanets); int getNumberOfPlanets(); char* getGalaxyName();
Die Klasse Planet sieht folgendermaßen aus:
#include "Planet.h" class Planet { private: char* planetName; int size; public: Planet(int initialSize, char* initialPlanetName) { planetName = initialPlanetName; size = initialSize; } void setPlanetName(char* newPlanetName) { planetName = newPlanetName; } char* getPlanetName() { return planetName; } }; // hier wieder der header #include <string> Planet(int initialSize, char* initialPlanetName); void setPlanetName(char* newPlanetName); char* getPlanetName();
Die teils unsinnigen includes der string-Header sind mir bewusst
-
Moment. Da stimmt irgendwas nicht.
// Hier bindest du den Header (also die Klassendeklaration von Planet ein) #include "Planet.h" // Hier wird die Klasse aber deklariert? class Planet { /* */ };
Die Deklaration der Klasse gehört in den Header. Du musst auch nicht jede Methode inline definieren.
Du hast 2 Möglichkeiten:
1. Du schreibst vor die Klasse Galaxy #include "Planet.h"
2. Du benutzt in Galaxy nur Zeiger auf Planet und schreibst vor die Klasse "class Planet;" (forward declaration).Da dein Planet kein Galaxy-Objekt braucht, ist Methode 1 das, was du brauchst.
-
Und wenn du schon alles inline definierst, kannst du dir auch die .cpps sparen bzw. die sollten im Moment leer sein (bis auf das #include des jeweiligen Headers vielleicht).
Hm, noch so andere Interessensfragen: Wozu ist numberOfPlanets, wenn du eh einen Vektor nimmst? Und warum ist die Planetenliste (genau wie der Galaxienname) ein Zeiger? Sieht irgendwie komisch aus
-
Hmmm...
Scheint mir als sollte ich das alles mit einem C++ Buch in der Hand "überprogrammieren". Soweit danke erstmal für die Hilfe