Finde Fehler nicht



  • Hallo

    Ich habe ein Problem bei meinem Programm. Ich habe eine Struktur erzeugt und eine Klasse. Eine Funktion der Klasse greift auf diese Struktur. Doch jetzt entsteht ein Fehler beim Kompilieren.

    Hier ist der Code:

    // Definitions.h
    //
    #ifndef DEF_HPP
    #define DEF_HPP
    
    #define ME __declspec(dllexport)
    
    #endif
    
    // Structures.h
    //
    #ifndef STRUCTURES_HPP
    #define STRUCTURES_HPP
    
    #include "Cube3DEngine.h"
    #include "Definitions.h"
    
    struct ME SCube3DEngineProperties
    {
    	int sWindowWidth;
    	int sWindowHeight;
    };
    
    #endif
    
    // Cube3DEngine.h : Definiert die exportierten Funktionen für die DLL-Anwendung.
    //
    #include <windows.h>
    #include "Structures.h"
    #include "Definitions.h"
    
    #ifndef CUBE3DENGINE_HPP
    #define CUBE3DENGINE_HPP
    
    // Klasse erzeugen
    //
    class ME Cube3DEngine
    {
    public:
    
    	bool Initialize(SCube3DEngineProperties & props);
    	void SetWindowProperties (const int WindowWidth, const int WindowHeight);
    	void SetWindowColor (int R, int G, int B);
    	HWND OpenWindow (HINSTANCE hInstance);
    	static LRESULT WINAPI MsgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
    
    private:
    
    	static int m_WindowWidth;
    	static int m_WindowHeight;
    	static int m_R;
    	static int m_G;
    	static int m_B;
    };
    
    #endif
    
    // Cube3DEngine.cpp
    //
    #include "Cube3DEngine.h"
    
    int Cube3DEngine::m_WindowHeight; // = 0
    int Cube3DEngine::m_WindowWidth;  // = 0
    int Cube3DEngine::m_R;			  // = 0
    int Cube3DEngine::m_G;			  // = 0
    int Cube3DEngine::m_B;			  // = 0
    
    bool Cube3DEngine::Initialize(SCube3DEngineProperties & props)
    {
    
    }
    
    void Cube3DEngine::SetWindowProperties(const int WindowWidth, const int WindowHeight)
    {
    	m_WindowWidth = WindowWidth;
    	m_WindowHeight = WindowHeight;
    }
    
    void Cube3DEngine::SetWindowColor(int R, int G, int B)
    {
    	m_R = R;
    	m_G = G;
    	m_B = B;
    }
    
    HWND Cube3DEngine::OpenWindow(HINSTANCE hInstance)
    {
    	WNDCLASSEX wc;
    
    	wc.style			= CS_HREDRAW | CS_VREDRAW;
    	wc.cbSize			= sizeof (wc);
    	wc.lpfnWndProc		= MsgProc;
    	wc.cbClsExtra		= 0;
    	wc.cbWndExtra		= 0;
    	wc.hInstance		= hInstance;
    	wc.hIcon			= LoadIcon (NULL, IDI_APPLICATION);
    	wc.hCursor			= LoadCursor (NULL, IDC_ARROW);
    	wc.hbrBackground	= (HBRUSH)CreateSolidBrush(RGB(m_R, m_G, m_B));
    	wc.lpszMenuName		= NULL;
    	wc.lpszClassName	= TEXT ("Cube3DEngine");
    	wc.hIconSm			= LoadIcon (NULL, IDI_APPLICATION);
    
    	if (RegisterClassEx (&wc) == 0) return 0;
    
    	return CreateWindowEx (NULL, TEXT("Cube3DEngine"), TEXT("Cube3DEngine"),
    						   WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    						   GetSystemMetrics(SM_CXSCREEN)/2 - 250,
    						   GetSystemMetrics(SM_CYSCREEN)/2 - 187,
    						   m_WindowWidth, m_WindowHeight, NULL,
    						   NULL, hInstance, NULL);
    }
    
    LRESULT WINAPI Cube3DEngine::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch (msg)
    	{
    		// key was pressed
    		//
    	case WM_KEYDOWN:
    		{
    			switch (wParam)
    			{
    			case VK_ESCAPE:
    				{
    					PostMessage (hwnd, WM_CLOSE, 0, 0);
    					return 0;
    				} break;
    			default: break;
    			}
    		} break;
    
    	case WM_DESTROY:
    		{
    			PostQuitMessage (0);
    			return 0;
    		}
    	default: break;
    	}
    
    	return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    

    Und der Fehler:

    1>------ Erstellen gestartet: Projekt: Cube3DEngine, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>Cube3DEngine.cpp
    1>c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.h(16) : error C2061: Syntaxfehler: Bezeichner 'SCube3DEngineProperties'
    1>c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.cpp(12) : error C2511: 'bool Cube3DEngine::Initialize(SCube3DEngineProperties &)': Überladene Memberfunktion nicht in 'Cube3DEngine' gefunden
    1>        c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.h(13): Siehe Deklaration von 'Cube3DEngine'
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngine\Cube3DEngine\Debug\BuildLog.htm" gespeichert.
    1>Cube3DEngine - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Kann mir jemand helfen?

    Gruss Patrick



  • Ich habe den Fehler bereits gefunden.

    Ich habe #include "Cube3DEngine.h" weggenommen bei Structures.h

    Danke trotzdem



  • Nun habe ich aber ein Problem beim ausführen des Programmes. Es hat kein geeigneter Standardkonstruktor verfügbar.

    Hier ist der Code:

    // main.h
    //
    #include <windows.h>
    #include <Cube3DEngine.h>
    #pragma comment(lib, "Cube3DEngine.lib")
    
    #define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
    #define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    
    // Klasse erzeugen
    //
    class CApplication : public Cube3DEngine
    {
    public:
    
    	CApplication(){}
    	virtual ~CApplication(){}
    
    private:
    
    };
    
    // main.cpp
    //
    #include "main.h"
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
    	MSG msg;
    	HWND hwnd;
    	bool bDone = false;
    	CApplication * pApp = new CApplication();
    
    	pApp->SetWindowProperties(1200, 1000);
    	pApp->SetWindowColor(0, 0, 255);
    	hwnd = pApp->OpenWindow(hInstance);
    
    	while(!bDone)
    	{
    		while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    
    			if(KEY_DOWN(VK_ESCAPE))
    			{
    				bDone = true;
    				PostMessage(hwnd, WM_CLOSE, 0, 0);
    			}
    		}
    	}
    
    	delete pApp;
    	return 0;
    }
    

    Hier ist die Fehlerausgabe:

    1>------ Erstellen gestartet: Projekt: Cube3DEngineTest, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>main.cpp
    1>c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3denginetest\cube3denginetest\main.h(16) : error C2512: 'Cube3DEngine': Kein geeigneter Standardkonstruktor verfügbar
    1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngineTest\Cube3DEngineTest\Debug\BuildLog.htm" gespeichert.
    1>Cube3DEngineTest - 1 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    

    Kann mir jemand helfen?

    Gruss Patrick


Log in to reply