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 🙂


Anmelden zum Antworten