Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Tim Ohliger

Frischling

  • »Tim Ohliger« ist der Autor dieses Themas

Beiträge: 12

Wohnort: Solingen

Beruf: Schüler & Student

  • Private Nachricht senden

1

04.02.2010, 19:25

Problem:Konstante Variable einer Struktur

Hallo. :)

Ich habe bisher das Buch "C++ für Spieleprogrammierer" durchgearbeitet und versuche mich im Moment an "3D-Spieleprogrammierung", aber seit ein paar Tagen arbeite ich mit zwei Freunden gemeinsam an einem Projekt.

Ich bin für die GUI zuständig, da die besagten Freunde bisher nur die Konsole kennen.

Deshalb habe ich versucht eine Windowsanwendung in eine Klasse zu packen.
Das hab ich bis jetzt auch ganz gut geschaft, nur jetzt wo ich versucht hab einen Button zu erstellen und mit ihm zu arbeiten halten mich zwei fieser Fehler auf, nur komme ich nicht drauf wie ich es lösen könnte.

Der erste Ausschnitt ist aus der .cpp der Klasse und zeigt den Konstruktor mit einer Initialisiererliste.
Meine Frage hier wär, ob ich einem konstanten Integer einer Struktur einen Wert per Initialisiererlist zufügen kann.

Der zweite Ausschnitt ist aus der .hpp und zeigt auch nochmal die Struktur und dessen statische Instanz.
Außerdem ist dort die WindowProc(), bei der mir der Compiler sagt btnList.ID wäre nicht konstant, obwohl es ja ganz klar als const deklariert ist.
Dieser Fehler verursacht wohl auch die Wahrnung ein paar Zeilen später.


Ich hoffe ihr könnt mir helfen.

MfG Tim


PS:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Konstruktor

//

C_GUI::C_GUI(HINSTANCE new_hInst, int xPos, int yPos, int width, int height):
hInst(new_hInst),
mainWnd.ID(0), //FEHLER: error C2059: Syntaxfehler: '.'

lblMenu.ID(1000),
lblWelt.ID(1001),
cbWelt.ID(1002),
lblAcc.ID(1003),
cbAcc.ID(1004),
btnList.ID(1005)
{
//...

};
//

//Konstruktor

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
    //...


private:
    //WndComp

        //

    struct WndComp
    {
        HWND handle; //Handle

        int xPos, yPos; //Position

        int width, height; //Größe

        const int ID; //ID

    };
    //

    //WndComp


        //...


    //Hauptfenster

    static WndComp mainWnd;

    //...


    //WindowProc

    //Behandet Nachrichten

    //

    static LRESULT CALLBACK WindowProc(HWND hWnd, UINT message,
                                WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_DESTROY:
                {
                    PostQuitMessage(0);
                    return 0;
                }
            case WM_COMMAND:
                {
                    switch(wParam)
                    {
                        case btnList.ID: //error C2051: case-Ausdruck ist keine Konstante

                            {
                                SendMessage(mainWnd.handle,STN_DISABLE,(WPARAM)lblMenu.ID,(LPARAM)lblMenu.handle);
                            }

                    } //warning C4060: switch-Anweisung enthält weder 'case'- noch 'default'-Marken

                }
        }
        return (DefWindowProc(hWnd, message, wParam, lParam));
    };
    //

    //WindowProc

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

04.02.2010, 19:39

Zitat

Meine Frage hier wär, ob ich einem konstanten Integer einer Struktur einen Wert per Initialisiererlist zufügen kann.

Dafür musst du einen Konstruktor für die jeweilige Struktur schreiben und dann den Wert übergeben dort weitergeben.

Der zweite Ausschnitt ist ja klar. Du kannst keinen nicht konstanten Ausdruck für ein case Label verwenden. Für musst du eine if-Abfrage benutzen.
Und die warning sagt ja auch bereits alles.

Tim Ohliger

Frischling

  • »Tim Ohliger« ist der Autor dieses Themas

Beiträge: 12

Wohnort: Solingen

Beruf: Schüler & Student

  • Private Nachricht senden

3

04.02.2010, 20:15

Danke, hat mir sehr weiter geholfen. :)

Von einem Konstruktor für eine Struktur hab ich ja noch nie gehört, klingt aber logisch. ;D

MfG Tim

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

4

04.02.2010, 20:21

In C++ ist ein struct genau das gleiche, wie class, ausser, dass die Member Standardmässig public, anstatt private sind und es wird ebenfalls standardmässig öffentlich und nicht privat vererbt.

Du kannst also alles bei Strukturen benutzen, was du bei Klassen benutzen kannst. Üblicherweise werden Strukturen aber wirklich nur Minimal mit Klassenfunktionalitäten bestückt, wie eben z.B Konstruktoren. Wenn mehr Funktionen Sinn machen, dann nimmt man üblicherweise eine Klasse. (also einfach das Schlüsselwort ändern ;)).

Tim Ohliger

Frischling

  • »Tim Ohliger« ist der Autor dieses Themas

Beiträge: 12

Wohnort: Solingen

Beruf: Schüler & Student

  • Private Nachricht senden

5

04.02.2010, 20:32

Und ich dachte immer, dass Strukturen gar keine Funktionen enthalten können. xD

Zwar hab ich keinen Compilerfehler mehr, aber dafür reagiert mein Button immer noch nicht.
Aber jetzt werd ich es wohl alleine hinbekommen.

Danke für die schnelle Hilfe. :)

MfG Tim

Werbeanzeige