bool undefined identifier



  • #include <windows.h>
    #include <gl/gl.h>
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    // UINT = unsigned int
    // LPSTR = char*
    
    // HINSTANCE =   Handle to an "instance" -> the program itself
    // HWND      =   Handle to a window
    // HDC       =   Handle to a device context (output device)
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow) {
        char szAppName[] = "OpenGL";
        HWND         hwnd;
        MSG          msg;
        WNDCLASS     wndclass;
    
        wndclass.style         = CS_HREDRAW |CS_VREDRAW;
        wndclass.lpfnWndProc   = WndProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = hInstance;
        wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
        wndclass.lpszMenuName  = NULL;
        wndclass.lpszClassName = szAppName;
    
        if (!RegisterClass(&wndclass)) {
            MessageBox (NULL, "An Error has occured!", szAppName, MB_ICONERROR | MB_OK);
            return 0 ;
        }
        hwnd = CreateWindow (szAppName,                  // window class name
                             "OpenGL",                   // window caption (title)
                             WS_OVERLAPPEDWINDOW,        // window style
                             CW_USEDEFAULT,              // initial x position
                             CW_USEDEFAULT,              // initial y position
                             CW_USEDEFAULT,              // initial x size
                             CW_USEDEFAULT,              // initial y size
                             NULL,                       // parent window handle
                             NULL,                       // window menu handle
                             hInstance,                  // program instance handle
                             NULL);                      // creation parameters
    
        ShowWindow(hwnd, iCmdShow);
        UpdateWindow(hwnd);
    
        bool quit = false; // main.c|49|error: `bool' undeclared (first use in this function)
        while (!quit) {
            if (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) {
                if (msg.message != WM_QUIT) {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
                else
                    quit = true;
            }
            else {
                // OpenGL here
            }
        }
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    

    Hallo,

    Ich wollte gerade mit OpenGL beginnen, hab meine Vorlage kopiert, einige Anpassungen gemacht und wollte mal zum Test compilen.

    Da sagt der mir doch glatt:

    main.c|49|error: `bool' undeclared (first use in this function)
    

    Hab den Code einige Male durchgeschaut und wird einfach nicht schlau draus...

    Sieht einer von euch vielleicht den Fehler?

    Dankeschön,
    Sam

    EDIT: Hab das Problem gelöst, in der windows.h scheint es kein bool zu geben, dann verwende ich halt BOOL ^^



  • Hab nun doch noch ein weiteres Problem 😃

    Wollte aber keinen zweiten Thread aufmachen (Sorry für Double Post):

    if (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) {
                if (msg.message != WM_DESTROY) {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
                else {
                    MessageBox(NULL, "WM_DESTROY", NULL, MB_OK);
                    quit = TRUE;
                }
            }
    

    Eine MessageBox wird nie aufgerufen, dass heisst die Message WM_DESTROY wird nie gesendet, auch nicht wenn ich das Fenster schliesse?!
    Weiss wer woran das liegen könnte?

    Dankeschön,
    Sam



  • Huhu,

    zu deinem ersten Problem:

    #include <stdbool.h>
    


  • #define true ('/'/'/')
    #define false ('-'-'-')
    

    Keine Ahnung was genau bei dir nicht funktioniert, aber auf http://www.winprog.org/tutorial/ gibt es eine ziemlich gute Anleitung wie es geht.



  • nwp2 schrieb:

    #define true ('/'/'/')
    #define false ('-'-'-')
    

    ^^was ist das für'n quatsch?
    OP: wenn <stdbool.h> nicht da ist, benutze z.b. BOOL, TRUE, FALSE (also alles gross). wenn du <windows.h> includierst, dann haste die.
    🙂



  • --



  • ;fricky schrieb:

    nwp2 schrieb:

    #define true ('/'/'/')
    #define false ('-'-'-')
    

    ^^was ist das für'n quatsch?

    Verstehst Du den Code nicht oder hast Du nur keinen Humor? :xmas1:



  • oder, wenn man auf selbermachen steht:

    typedef enum {false, true} bool;
    

    🙂



  • volkard mein Respekt für dich ist gerade enorm gestiegen. Dachte nicht dass hier wer Humor hat. Das kommt übrigens nichmal von mir, ist geklaut von hier: http://www.steike.com/code/useless/evil-c/



  • volkard schrieb:

    Verstehst Du den Code nicht oder hast Du nur keinen Humor?

    ich hab's bis eben nicht verstanden. fieses ding *fg*
    🙂



  • nwp2 schrieb:

    Dachte nicht dass hier wer Humor hat.

    wenigstens hast du welchen, das beweist du ja regelmässig im ansi-C forum *fg*
    🙂


Anmelden zum Antworten