Frage zur Schreibweise
-
Hallo,
ich hab ein Programm, das soweit auch funktioniert. Allerdings taucht darin ein Teil auf, den ich gerade versuche nachzuvollziehen und ein paar Probleme habe (geht um Drag and Drop mit OLE):
HGLOBAL hText; COleDataSource* pDataSource = new COleDataSource; hText = ::GlobalAlloc(GMEM_SHARE, 256); LPSTR pText = (LPSTR)::GlobalLock(hText);Das es dabei im Groben darum geht Speicher zu reservieren ist mir klar und wie ich jatzt nach den einzelnen Funktionen suche ist mir auch klar.
Was mir völlig neu ist sind die beiden :: vor GlobalAlloc.
Haben die den Sinn die Funktion der Vaterklasse aufzurufen?Ich hab echt keine Idee, wie nach sowas googeln soll...
Danke schon mal,
Chris
-
angelus05 schrieb:
Was mir völlig neu ist sind die beiden :: vor GlobalAlloc.
Haben die den Sinn die Funktion der Vaterklasse aufzurufen?nein, damit wird nur nochmal verdeutlicht, dass sich diese Funkionen im global-scope befinden.
wird z.b. gebraucht, wenn sich in dem aktuellen namespace eine funktion mit gleichem namen befindet.void myfunc(); // v1 // ... namespace myns { void myfunc(); // v2 } // namespace myns { void hallo() { myfunc(); // ruft myns::myfunc auf, ist also dasselbe wie myns::myfunc(); ::myfunc(); // ruft v1 auf } }grüße
-
Da wäre ich so schnell nicht drauf gekommen...
Schönen Abend.
-
Das beste Beispiel sind die unzähligen MFC-Ableger der WinAPI-Funktionen.
In einem MFC-Projekt hast du eine MFC-methode "MessageBox", die sich von der WinAPI-Funktion "MessageBox" unterscheidet (diese hat auch einen zusätzlichen Parameter hdc).
//MFC-Variante int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK ); //WinAPI-Variante int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType ); //Aufruf innerhalb einer MFC-Methode MessageBox("hello world"); //MFC ::MessageBox(0,"hello world",0,0); //WinAPI
-
In Klassenbiblitheken verwende ich gerne ::func() immer dann wenn globale Funktionen oder Funktionen aus der Win32 API verwendet werden. Das ist Geschmacksache ist aber bei uns allgemein als lesbarer bewertet worden.
-
Martin Richter schrieb:
In Klassenbiblitheken verwende ich gerne ::func() immer dann wenn globale Funktionen oder Funktionen aus der Win32 API verwendet werden. Das ist Geschmacksache ist aber bei uns allgemein als lesbarer bewertet worden.
Dazu hätte ich aber nochmal eine Frage. Heißt das, dass der Scopeoperator im Beispiel von _matze nur optional ist? Der Compiler dürfte doch anhand der unetrschiedlichen Parameterlisten erkennen, welche Messagebox gemeint ist. oder? Im folgenden Beispiel muss man den verwenden, um zwischen lokal und global zu unterscheiden:
int xyz=42; main () { int xyz=36; xyz++; // lokales xyz = 37 ::xyz++; // globales xyz = 43 }Hab ich das so richtig verstanden? Alternativ könnte man ja auch mit namespaces arbeiten...
-
Nein, ist in dem Fall nicht optional.
::MessageBox(AfxGetMainWnd()->GetSafeHwnd(),"test",0,0); //OK MessageBox(AfxGetMainWnd()->GetSafeHwnd(),"test",0,0); //error C2660: 'CWnd::MessageBoxA': Funktion akzeptiert keine 4 Argumente