WinAPI vergessenes Semikolon?



  • Hallo, ich erhalte immer folgenden fehler:

    Fehler	1	error C2628: 'OpenGL_Init' gefolgt von 'int' unzulässig (Semikolon ';' vergessen?)	c:\users\timo\documents\visual studio 2010\projects\tutorial ogl\tutorial ogl\main.cpp	6
    Fehler	2	error C2556: 'OpenGL_Init WinMain(HINSTANCE,HINSTANCE,LPSTR,int)': Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'int WinMain(HINSTANCE,HINSTANCE,LPSTR,int)'	c:\users\timo\documents\visual studio 2010\projects\tutorial ogl\tutorial ogl\main.cpp	6
    Fehler	3	error C2371: 'WinMain': Neudefinition; unterschiedliche Basistypen	c:\users\timo\documents\visual studio 2010\projects\tutorial ogl\tutorial ogl\main.cpp	6
    

    hier ist der Quellcode:

    main.cpp:

    // main.cpp
    #include "stdafx.h"
    #include "opengl_init.h"
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int iCmdShow){
    
    	OpenGL_Init OpenGL_Start;
    	if(!OpenGL_Start.screen_setup(hInst, iCmdShow, 640, 420)){
    		MessageBox(NULL, "FAILED", "ERROR", MB_OK | MB_ICONERROR);
    
    		return false;
    	}
    
    	OpenGL_Start.opengl_setup();
    
    	while(true){
    		if(OpenGL_Start.key_pressed()){
    			break;
    		}
    	}
    	return 0;
    }
    

    opengl_init.h:

    //opengl_init.h
    
    class OpenGL_Init{
    
    	private:	
    		HWND	   hWnd;
    		WNDCLASSEX WndClassEx;
    		MSG		   msg;
    
    		HDC					  hDC;
    		HGLRC				  hGLRC;
    		PIXELFORMATDESCRIPTOR pfd;
    		int iFormat;
    		int iWidth;
    		int iHeight;
    
    	public:
    		unsigned char key_pressed();
    		void opengl_setup();
    		bool screen_setup(HINSTANCE hInst, int iCmdShow, int iWidth, int iHeight);
    
    }
    

    stdfx.h:

    // stdafx.h
    //Includes
    #include <Windows.h>
    #include <gl\gl.h>
    #include <gl\glu.h>
    
    #pragma comment (lib, "opengl.lib")
    #pragma comment (lib, "glu.lib")
    #pragma comment (lib, "glut32.lib")
    

    opengl_init.cpp:

    // opengl_init.cpp
    #include "stdafx.h"
    #include "opengl_init.h"
    
    unsigned char OpenGL_Init::key_pressed(){
    	if(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)){
    		if(msg.message == WM_QUIT || msg.message == WM_KEYDOWN){
    			return 1;
    		}
    		TranslateMessage(&msg);
    		DispatchMessage( &msg);
    	}
    	return 0;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
    
    	switch(msg){
    	case WM_DESTROY:
    		PostQuitMessage(0);
    	break;
    	case WM_QUIT:
    		MessageBox(hWnd, "Ciao", "by TimoNeon", MB_OK);
    	break;
    	default:
    		return DefWindowProc(hWnd, msg, wParam, lParam);
    	break;
    	}
    	return 0;
    }
    
    void OpenGL_Init::opengl_setup(){
    
    	memset(&pfd, 0, sizeof(pfd));
    
    	pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
    	pfd.nVersion = 1;
    	pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    	pfd.iPixelType = PFD_TYPE_RGBA;
    	pfd.cColorBits = 32;
    	pfd.cDepthBits = 32;
    	pfd.cAlphaBits = 8;
    
    	hDC = GetDC(hWnd);
    	iFormat = ChoosePixelFormat(hDC, &pfd);
    	SetPixelFormat(hDC, iFormat, &pfd);
    
    	hGLRC = wglCreateContext(hDC);
    	wglMakeCurrent(hDC, hGLRC);
    
    	glLoadIdentity();
    }
    
    bool OpenGL_Init::screen_setup(HINSTANCE hInst, int iCmdShow, int iWidth, int iHeight){
    
    	this->iWidth = iWidth;
    	this->iHeight = iHeight;
    
    	char szClassName[] = "MyWndClassEx";
    	char szWindowTitle[] = "TMD";
    
    	WndClassEx.cbSize = sizeof(WNDCLASSEX);
    	WndClassEx.style = NULL; //!!!
    	WndClassEx.cbClsExtra = NULL;
    	WndClassEx.cbWndExtra = NULL;
    	WndClassEx.hInstance = hInst;
    
    	WndClassEx.hIcon = LoadIcon(hInst, IDI_APPLICATION);
    	WndClassEx.hCursor = LoadCursor(hInst, IDC_ARROW);
    	WndClassEx.hIconSm = NULL;
    
    	WndClassEx.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
    
    	WndClassEx.lpfnWndProc = WndProc;
    	WndClassEx.lpszMenuName = NULL;
    	WndClassEx.lpszClassName = szClassName;
    
    	if(!RegisterClassEx(&WndClassEx)){
    		MessageBox(NULL, "Failed to register WndClass", "ERROR!", MB_OK | MB_ICONERROR);
    
    		return false;
    	}
    	hWnd = CreateWindow(szClassName, szWindowTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, iWidth, iHeight, NULL, NULL, hInst, NULL); 
    
    		if(!hWnd){
    		MessageBox(NULL, "Failed to Create Window!", "ERROR", MB_OK | MB_ICONERROR);
    		return false;
    	}
    
    	ShowWindow(hWnd, iCmdShow);
    	UpdateWindow(hWnd);
    }
    

    Ich hab jetzt schon knapp 2 Stunden nach dem Fehler gesucht, aber ich finde ihn nicht 😕 😕 schon mal danke im vorraus 🙂



  • Du musst die Klassendefinition mit einem Semikolon abschließen.

    //opengl_init.h
    
    class OpenGL_Init{
    
       //...
    
    }; // !!!
    


  • Ok, danke 🙂 jetzt gibt es aber 4 weitere Fehler 😕 😕

    Du musst die Klassendefinition mit einem Semikolon abschließen.

    Fehler

    Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: unsigned char __thiscall OpenGL_Init::key_pressed(void)" (?key_pressed@OpenGL_Init@@QAEEXZ)" in Funktion "_WinMain@16".	C:\Users\Timo\documents\visual studio 2010\Projects\Tutorial OGL\Tutorial OGL\main.obj
    Fehler	2	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall OpenGL_Init::opengl_setup(void)" (?opengl_setup@OpenGL_Init@@QAEXXZ)" in Funktion "_WinMain@16".	C:\Users\Timo\documents\visual studio 2010\Projects\Tutorial OGL\Tutorial OGL\main.obj
    Fehler	3	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: bool __thiscall OpenGL_Init::screen_setup(struct HINSTANCE__ *,int,int,int)" (?screen_setup@OpenGL_Init@@QAE_NPAUHINSTANCE__@@HHH@Z)" in Funktion "_WinMain@16".	C:\Users\Timo\documents\visual studio 2010\Projects\Tutorial OGL\Tutorial OGL\main.obj
    Fehler	4	error LNK1120: 3 nicht aufgelöste externe Verweise.	C:\Users\Timo\documents\visual studio 2010\Projects\Tutorial OGL\Debug\Tutorial OGL.exe	1
    


  • Vielleicht solltest du die Datei opengl_init.cpp dem Projekt hinzufügen...



  • Und wie mache ich das? :o



  • Diese Frage ist nicht valide 😡



  • TimoNeon schrieb:

    Und wie mache ich das? :o

    Na z.B. mit Klicksi-Klicksi.



  • Na z.B. mit Klicksi-Klicksi.

    WOW, also die datei ist ja im Source ordner.
    Und wenn du nicht helfen kannst/willst, dann lass es.


  • Mod

    TimoNeon schrieb:

    Na z.B. mit Klicksi-Klicksi.

    WOW, also die datei ist ja im Source ordner.
    Und wenn du nicht helfen kannst/willst, dann lass es.

    Aber nicht in Deinem Projekt!

    Es geht mit Klicksi Klicksi!

    In Deinem Projekt im Solution Explorer sind die Dateien aufgelistet, die auch für den Build mit eingeschlossen sind.
    Andere Dateien in anderen Ordnern order in diesem Ordner werden ignoriert.

    Also einfach per Drag&Drop in die Solution/Projket ziehen. Oder dort rechter Mausklick.

    BTW: Das hättest Du Dir auch selbst erarbeiten können.



  • Offtopic:

    Beim lesen dieses Threads kommt mir das Gefühl, das ganz furchtbar schlimm die Grundlagen zum programmieren fehlen ...

    Du kannst weder mit dem debugger umgehen, scheinbar noch die einfachsten Fehlermeldungen verstehen.

    Vielleicht solltest du dich nochmal intensiv mit den basics beschäftigen. Ich kann die "netten" Antworten von NeinOr und hustbaer voll und ganz verstehen, das die das nicht auch noch vorkauen wollten.

    Gruß
    Ombre



  • Du kannst weder mit dem debugger umgehen, scheinbar noch die einfachsten Fehlermeldungen verstehen.

    Vielleicht solltest du dich nochmal intensiv mit den basics beschäftigen. Ich kann die "netten" Antworten von NeinOr und hustbaer voll und ganz verstehen, das die das nicht auch noch vorkauen wollten.

    eigentlich schon, ich programmiere schon mehr als 1 jahr Java. es tut mir leid, dass ich mit VSE2012 bzw. mit den angezeigten fehlermeldungen noch nicht vertrut bin. Aber es wäre ziemlich nett, wenn mir jemand helfen könnte das Problem zu lösen.



  • Mach die "Solution Explorer" Ansicht auf, mach darin dein Projekt auf. Da gibt's dann nen Folder "Source Files". Rechtsklick auf diesen Folder -> Add -> Existing Item...

    Alternativ nimm die Datei im Explorer und zieh sie einfach in den Folder "Source Files" im Visual Studio Fenster.
    Dazu nimmst du die Datei im Explorer, und ziehst sie erstmal über den Taskbar-Button von Visual-Studio. Nach 1-2 Sekunden holt Windows dann das Visual Studio Fenster nach vorne. Dann kannst du die Datei über den Source Files Folder ziehen, und loslassen.

    Wie Drag & Drop funktioniert gehört für mich zu den grundlegendsten Grundlagen überhaupt. Dass viele Programme Drag & Drop unterstützen sollte man auch wissen, und wenn man was machen will wo sich Drag & Drop geradezu anbietet dann sollte man einfach mal probieren ob es das Programm nicht vielleicht unterstützt.

    Und auch die Variante ohne Drag and Drop ist SO einfach zu finden, dass ich mich frage... wenn du das schon nicht selbst hinbekommst... was kommt dann als nöchste Frage? Wie du Visual Studio zumachst ohne den PC runterzufahren?


Log in to reply