Klassen mit include einbinden?

TrAgIc

Grünschnabel
Ich hab das Problem, dass ich in einer Klasse eine andere verwenden möchte, was so erstmal kein Problem sein sollte. Habe diese verwendete Klasse nun in eine eigene cpp und eine Header geschrieben. includeiere diese Header in der Klasse die die andere verweden soll. Tja, aber er kennt dann scheinbar die Klassendefinition nicht :( Woran kann das liegen vergess ich was?
 
Prinzipiell ist dieses Vorgehen schon mal ok.

Wo verwendest du diese Klasse, lokal innerhalb einer Methode oder als Member-Variable?
Wo hast du includiert, in .h oder .cpp?
Was genau bekommst du an Fehlern?
 
Hi,
du hast zwar nicht verraten, mit welchem Compiler du arbeitest aber hast du evt den banalen Fehler begangen, die Dateien nicht mit in dein Projekt aufzunehmen?

Gruss Michael
 
Code:
// main.cpp (oder eben Klasse2... macht kein Unterschied)
#include "Klasse.hpp"

int main() { /*... */ }

// Klasse.hpp
#ifndef _KLASSE_HPP
#define _KLASSE_HPP

class Klasse
{
    public:
        Klasse();
        ~Klasse();
};

#endif

// Klasse.cpp
#include "Klasse.hpp"

Klasse::Klasse() { /* ... */ }
Klasse::~Klasse() { /* ... */ }

Dann noch die Klasse.cpp compillieren und mitlinken.
 
Ok ich geb zu, hab euch ein bisschen wenig Infos mitgegeben, war ja aber auch schon spät...

Code:
#ifndef _SKYBOX_H
#define _SKYBOX_H

#include "JPEG.h"

#define SKYFRONT 0						// Give Front ID = 0
#define SKYBACK  1						// Give Back  ID = 1
#define SKYLEFT  2						// Give Left  ID = 2
#define SKYRIGHT 3						// Give Right ID = 3
#define SKYUP    4						// Give Up    ID = 4
#define SKYDOWN  5						// Give Down  ID = 5

class Skybox 
{
public:
	UINT SkyboxTexture[6];		// We need 6 textures for our Skybox

	void init();
	void Draw_Grid();
	void Draw_Skybox(float x, float y, float z, float width, float height, float length);
};

#endif

Diese Klasse ist dann in der Skybox.cpp implementiert. Und das nächste Listing ruft diese auf.

Code:
#ifndef _UNIVERS_H
#define _UNIVERS_H

#include "Skybox.h"

class Univers{

private: 
	Skybox _aSkyBox;
	double _sizeX;
	double _sizeY;
	double _sizeZ;

public:
	Univers(double sizeX, double sizeY, double sizeZ);
	void init();
	Skybox getSkyBox();
};

#endif

Und bei der Deklarierung von Skybox als private Membervariable kommt folgender Fehler:

error C2146: syntax error : missing ';' before identifier '_aSkyBox'

sowie

error C2501: 'Univers::Skybox' : missing storage-class or type specifiers
 
Hi,
bin mir zwar nicht sicher obs hilft aber versuchs mal mit wenigstens Konstruktoren in beiden Klassen...

Ansonsten habe ich am prinzipiellen Aufbau nix gefunden.

Gruss Michael
 
Wenn du eine Datei mit #include "datei.h" einbindest, dann muss diese sich auchin dem selben Verzeichnis befinden, wie die Datei, die diese einbindet.

mfg
 
Das Problem ist, dass du Cyclic Dependencies in deinen Include-Headern hast. Univers.hpp included Skybox.hpp, die included jpeg.h, die included main.h (was hat main mit jpeg zu tun?) und die included Univers.h. Mit anderen Worten, die sind beide von einander abhängig, wenn auch indirekt. Wenn du bei Skybox ja nur das UINT typedef brauchst, ersetz das doch durch "unsigned long", das es sowieso ist, oder versuch, die Abhängigkeiten ein bisschen abzugrenzen.
 
Guten Morgen, liebe...

Ring-Include ist natürlich möglichst zu vermeiden.
Versuch trotzdem mal den Befehl "extern".
Ist zwar auch nicht schön aber manchmal geht es halt nicht anderes.

Gruss Michael
 

Neue Beiträge

Zurück