Klassenproblem



  • Hi,
    ich fange gerade mit einem kleinen Programm an, da habe ich jetzt erst mal 3 Klassen angelegt und die eine Klasse hat als Attribute je einen pointer auf die andere Klasse. Soweit so gut.
    Dann habe ich eine Global.h erstellt, wo ich dann alle Headerdateien einbinde.
    So wenn ich jetzt dass fast leere Programm kompilieren möchte bekomme ich bei jeder Klasse einen Fehler, dass er die angegebene Klasse nicht kennen würde... 😕
    Woran kann das liegen?
    Ich habe schon die jeweiligen Headerdateien nochmal extra in der Headerdatei der Klasse mit den Attributen included, aber nix geht, pls help me!!!

    p.s. hier noch ein auszug der Fehlermeldung:

    c:\projekte\cotw direct3d\xklapplication.h(14) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'm_p_Wnd'
    c:\projekte\cotw direct3d\xklapplication.h(14) : error C2501: 'CxklWindow' : Fehlende Speicherklasse oder Typbezeichner
    c:\projekte\cotw direct3d\xklapplication.h(14) : error C2501: 'm_p_Wnd' : Fehlende Speicherklasse oder Typbezeichner



  • wäre natürlich sehr praktisch, wenn du die entsprechenden Auszüge aus deinem Quelltext hier posten könntest, da ich mir sonst sehr schlecht nur ein Bild über den Fehler machen kann !



  • hast du global.h dann auch bei den Klassen-Definitionen (also deren .h Dateien) inkludiert? Falls nicht solltest du dass tun.
    Vergiss auch "pragma once" nicht, wenn du ein VisualStudio bnutzt. Dies sorggt dafür dass so deklarierte Header vom Compiler nur einmal eingelesen werden. Solltest du einen anderen Compiler verwenden, musst du so ein if-defined Präprozessor-Konstrukt benutzen (weiss den Code leider nicht aus dem FF).



  • Ich benutze zwar das Visualstudio und ich habe beide versionen versucht, aber irgendwie haben beide nicht gefunzt.
    OK, hie rmal etwas Code:

    //xklGlobal.h
    #ifndef COTW_DIRECT3D_GLOBAL_H
    #define COTW_DIRECT3D_GLOBAL_H
    
    #include <windows.h>
    #include <d3d9.h>
    #include <d3d9types.h>
    #pragma comment(lib, "d3d9.lib")
    
    #include "xklDirect3D.h"
    #include "xklWindow.h"
    #include "xklApplication.h"
    
    #endif
    
    // xklDirect3D.h: Schnittstelle für die Klasse CxklDirect3D.
    //
    //////////////////////////////////////////////////////////////////////
    
    #ifndef COTW_DIRECT3D_CXKLDIRECT3D_H_
    #define COTW_DIRECT3D_CXKLDIRECT3D_H_
    
    #include "xklGlobal.h"
    
    class CxklDirect3D  
    {
    private:
    	int								m_i_width,
    										m_i_height,
    										m_i_depth;
    
    	HWND							m_h_Wnd;
    
    	LPDIRECT3D9				m_lp_D3D9;
    
    	LPDIRECT3DDEVICE9	m_lp_D3DD9;
    
    private:
    	DWORD	EnumAdapter(void);
    
    public:
    	CxklDirect3D(int, int, int);
    	virtual ~CxklDirect3D();
    };
    
    #endif
    
    // xklApplication.h: Schnittstelle für die Klasse CxklApplication.
    //
    //////////////////////////////////////////////////////////////////////
    
    #ifndef COTW_DIRECT3D_XKLAPPLICATION_H_
    #define COTW_DIRECT3D_XKLAPPLICATION_H_
    
    #include "xklGlobal.h"
    
    class CxklApplication  
    {
    private:
    	CxklDirect3D*		m_p_D3D; // und hier hat er die Fehler
    	CxklWindow*			m_p_Wnd; // ''
    public:
    	CxklApplication();
    	virtual ~CxklApplication();
    
    	LRESULT WndProc(HWND, UINT, WPARAM, LPARAM);
    };
    
    #endif
    


  • habs jetzt nochmal schnell nachgeschaut:

    mit visual studio:

    //global.h:
    #pragma once
    #include "class1.h"
    #include "class2.h"
    
    //classx.h
    #pragma once
    class classx
    {
    };
    

    Ohne VS:

    //global.h
    #ifndef GLOBALS_INCLUDED
    #include "class1.h"
    #include "class2.h"
    #define GLOBALS_INCLUDED
    #endif
    
    //classx:
    #ifndef _CLASS_X_INCLUDED
    class classx
    {
    ...
    }
    #define _CLASS_X_INCLUDED
    #endif
    

    glaub ich zumindest....übernehme keine verantwortung für extreme dummheit, die randommässig mein gehirn min. 1x pro tag überrennt.



  • hmm, so spontan würd ich einfach mal des #include von den globals vor des #ifndef in den Klassen Dateien stellen.



  • Mutmaßer schrieb:

    hmm, so spontan würd ich einfach mal des #include von den globals vor des #ifndef in den Klassen Dateien stellen.

    Danke, das wars, jetzt funzt es!!!

    Danke nochmals, das war das einige was ich noch nicht ausprobiert hatte, danke für die schnelle hilfe!!!

    ciao



  • Hi,
    hab mal etwas weiter geproct, und jetzt bekomme ich, wenn ich ein attribut setzten möchte einen Speicerfehler. Beim Debuggen sagt mir die Werteüberwachung dass der this-> pointer 0x00000000 als adresse hat. 😕
    Wie kann der this pointer NULL sein? ohne ihn vorher auf NULL gesetzt zu haben? 😕



  • Ok,
    bin selbst drauf gekommen... 😃

    Ich hatte nach dem ganzen hin und her probiere, beim letzten versuch vergessen die Klasse im Konstruktor zu öffnen, und habe danach versucht drau zuzugreifen. 🤡


Anmelden zum Antworten