statische Methoden
-
@ CStoll
Sorry, haben wohl grad gleichzeitig geschrieben?
Vielen Dank, weiß zwar noch nicht ganz genau wie du das meinst werde es mir aber sofort anschauen.
Kannst dir garnicht vorstellen wie froh ich über einen Lösungsvorschlag bin
-Danke
-
-
Tupo13 schrieb:
Vielen Dank, weiß zwar noch nicht ganz genau wie du das meinst werde es mir aber sofort anschauen.
Dann etwas ausführlicher: Um nichtstatische Member-Elemente verwenden zu können, benötigst du ein konkretes Objekt. Eine "normale" Methode hat dafür "*this", bei einer statischen Methode fehlt der this-Zeiger und du mußt dir dein Objekt woanders beschaffen. (das kann eine globale Variable sein wie im ersten Beispiel, eine lokale Variable wie im zweiten Beispiel oder was auch immer - du könntest auch mit "static void func(X& myX);" ein Objekt als Parameter übergeben oder mit Hilfe der Parameter das richtige Objekt in einer std::map<irgendwas,X> suchen)
-
Noch eine Frage:
Ich hoffe, ich blamier mich nicht:
aber warum funktioniert das dann nicht? (in der statischen Funktion)
initialize init; Ip_addr *destIPadr; destIPadr=(Ip_addr *) (init.destIP); std::cout <<destIPadr->byte1<< std::endl;Gruß Tupo13
-
@CStoll
Leider funktioniert dein Beispiel nicht,
wenn ich so auf Membervariable zugreife lesend oder schreibend bekomme ich immer einen unsinnigen Wert.Auf normale Methoden lässt er mich auch nicht zugreifen
Mache ich etwas falsch?
Gruß Tupo13
-
Das wurde zwar AFAIK schon mal gesagt, aber in statischen Member-Methoden arbeitest du OHNE eine Instanz von dem Objekt, d.h. die nicht statischen Member (Methoden) existieren nicht, deshalb kein Zugriff.
-
Tupo13 schrieb:
@CStoll
Leider funktioniert dein Beispiel nicht,
wenn ich so auf Membervariable zugreife lesend oder schreibend bekomme ich immer einen unsinnigen Wert.Was meinst du mit "unsinniger Wert"?
-
Also als unsinniger Wert bekomme ich
-858993460 statt z.B. 10Aber so wie GPC sagt funktioniert das so sowieso nicht - oder doch?
-
Ein Beispiel:
struct Foo { static void staticMethod(int); private: static int statMem; int nonStatMem; }; int Foo::statMem = 0; void Foo::staticMethod(int i) { statMem = i; //Geht, da statMem static ist //nonStatMem = i; //Crash! nonStatMem ist nicht static! };
-
@ GPC
OK danke, jetzt hab ichs endlich mal soweit kapiert.
nur muss man es so schreiben
int Foo::statMem = 0;Danke Gruß Tupo13