static funktion verwenden, weiss echt nicht mehr weiter
-
also ich hab folgendes problem
in meiner dlg.h hab ich stehen ( hab code uebernommen )
static int CALLBACK OnlineCallBack(int nStatus, strTraceMessageData* pTraceData, void* pWnd);in der cpp steht am anfang
int CALLBACK CRunDlg::OnlineCallBack( int Status, strTraceMessageData* pTraceData, void* pWnd ) { strTraceMessageData* pNewTraceData; int nLength; CRunDlg* pThis=(CRunDlg*)pWnd; pThis->m_TraceStatus=Status; // und so weiter und so weiterjetzt hab ich ne public int variale in meiner .h stehen. diese moechte ich in der fkt. erhoehen. also hab ich es mit einer referenz versucht
und dann noch nach void* pWnd noch ,int &meinevar
eingegeben
dann hab ich in der fkt.meinevar++; // gemacht. aber ist waehrend der laufzeit abgestuerzt :(also dach ich mir
ok ohne ref. dann rufst halt ne fkt auf
also alles ganz normal gelassen, sprich wie vorher ( programm geht auch wunderbar )
und hab noch ne fkt hinzugefuegt die meine variable um 1 erhoeht
dann ruf ich die fkt in der onlinecallback auf.
// in der .h static int arise_count_messages(); // static sonst meckert er. WARUM eigentlich? static int count_messages_forrate; // musste ich auch static machen, warum den wieder?jetzt bring er mir ne fehlermeldung
error LNK2001: unresolved external symbol "public: static int CRunDlg::count_messages_forrate" (?count_messages_forrate@CRunDlg@@2HA)
das ist zum flennen. wie kann ich den da einfach ne variable hochzehlen, verflixt und zugenaeht. bitte kann mir da einer helfen? dank im voraus
-
Hi newkid,
ist Dir klar was static members sind?
Fall nein, lies folgendes:
Eine static variable ist der Klasse zugeordnet und nicht der objekt instanz. Das heißt Es gibt sie nur einmal für alle abjekte dieser Klasse.#inlcude <iostream.h> class A{ public: static int i; }; int A::i = 99; int main(int argc, char* argv[]) { A a1; A a2; cout << a1.i << endl; a1.i = 0; cout << a1.i << endl; a2.i = 100; cout << a1.i << endl; }Das Beispiel soll zeigen, daß es egal ist ob Du auf i durch a1 oder a2 zugreifst, einfach weil es nur einen Speicherplatz für beide gibt.
Außerdem siehst Du wie die variable korrekt initialisiert wird, damit verschwindet dein Linker error. Per definition werden statische variablen außerhalb der Klassen definition initialisiert. In Deinem Fall in der .cpp
Der große Unterschied bei statischen Funktionen ist, daß kein this pointer übergeben wird. Das heißt Du kannst in einer statischen funktion nicht schreibenthis->MyVar++;was gleichbedeutend ist mit:
MyVar++;Aber nur wenn die gleiche Variable nicht lokal ( in der Funktion ) überschrieben wurde, denn dann gilt die lokale Version. Da ein Teil bei deinem Code fehlt bzw. nur grob beschrieben wurde, könnte da der Grund liegen warum Dein Zugriff auf die Member variable compiliert wurde obwohl Du in einer statische funktion warst.
Übrigens, um das ganze zu lösen, benutze den pThis pointer in der Funktion, denn dafür ist er da.pThis->MyVar++;das sollte gehen, sonst liegt der wurm nochmal ganz woanders
Gruß
Ingo
-
also danke für die erläuterungen, hmm was man wieder neu lernt alles. cool
also du meinst ich soll ganz normal eine variable nehmen
und dann einfach in der static fkt.
pThis->Var++;
und das geht auf jedenfall? cool
bin erst am montag/dienstag am platz
ist aber wichtig das ich da ne variable hochzähle. da ich trace und die fkt. aufgerufen wird, falls was getraced wird.
hmmm ich hoff es geht.
-
wie kann ich dir danken????
also
DANKE MERCI
hat geklappt
was sehr gut ist
du sagst nicht nur die loesung, sondern vermittelst gut noch das hintergrundwissen dazu.

so leute wie dich braucht das forum

gruss
newkid