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

1

30.08.2011, 14:32

kleines problem mit friend funktion

hallo,
ich hab wohl gerade einen kleine denkfehler, könnt ihr vielleicht mal eben gucken ;)

habe diese klasse, interessant ist erstmal nur die friend deklaration:

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
class WINGUI_EXPORT CWindow
    {
        friend LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

        private:

            HWND hWnd;
            MSG msg;
            WNDCLASSEX windowClass;
            HINSTANCE hInstance;

            static std::map<HWND, CWindow*> windows;
            std::map<HWND, CControlElement*> controlElements;

            bool closed;

        public:

            CWindow() {}
            CWindow(char* pTitle, int pWidth, int pHeight, HINSTANCE pInstance);
            void AddControlElement(CControlElement* pControlElement);
            void DoMessageLoop();
            bool Closed();
            void Destroy();
            HWND GetHandle();
    };


und die entsprechende methode:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_DESTROY:
        {
            CWindow::windows[hWnd]->closed = true;
            return 0;
        }
        case WM_COMMAND:
        {
            CWindow::windows[hWnd]->controlElements[(HWND)lParam]->SetEvent(HIWORD(wParam));
            return 0;
        }
    }

    return DefWindowProc(hWnd, msg, wParam, lParam);
}


beim kompilieren bekomme ich:

Zitat

1>c:\users\benedikt\documents\visual studio 2010\projects\wingui\wingui\cwindow.cpp(10): error C2248: "WINGUI::CWindow::windows": Kein Zugriff auf private Member, dessen Deklaration in der WINGUI::CWindow-Klasse erfolgte.


und einige andere fehler, die aber selbe ursache haben.
Ich meine, dass der code unter vc++ 2008 express funktioniert hat, hab jetzt 2010.

kann eigentlich nur ein ganz kleiner fehler sein... ich finde ihn aber nicht :cursing:

2

30.08.2011, 14:57

hat sich erledigt, das problem war, dass die methode in nem anderen namespace war.

3

30.08.2011, 16:29

Gut dass es funktioniert :)
Habe einen Verbesserungs-Vorschlag.
Und zwar könntest du die WinProc als eine statische Methode definieren.
Dadurch gibt es auch keine Probleme mit den Members und es wäre sauberer, denn warum sollten andere Klassen die WinProc kenen dürfen? :)

Werbeanzeige