Warum funktioniert das Programm nicht wegen static int?
-
class Stisch{ public: int m; static int r; public: Stisch() {r++;m = r; } void leseWert(void); };
void Stisch::leseWert(void) { cout << "Wert von Nummer:" << r << endl; cout << "Nummer bei Erzeugung des Objekts: " << m << endl; };
int main() { Stisch a; a.leseWert(); .. return 0; }
Wenn ich das static weglasse, gibt es keine Probleme, aber es kommen keine Werte bzw. falsche Werte bei der Ausgabe raus. Aber wenn ich das static int r mache -> startet das Programm nicht und schreibt undefined reference to " Stisch::r"
-
Ja, das ist eine blöde Sache. In
@NewbieCoding sagte in Warum funktioniert das Programm nicht wegen static int?:
class Stisch{ public: // ... static int r;
ist
static int r;
nur eine Deklaration, keine Definition die dazu führt saß der Compiler weiß, das es irgendwo einStisch::r
gibt. Wo? Keine Ahnung. Abhilfe: definieren:int Stisch::r;
Was anderes. In der Version ohne
static
... welchen Wert hat denna.r
beiStisch a;
?. o O ( ist
Stisch
eigentlich ein Esstisch? )
-
@Swordfish habs gelöst -> Stisch::r=0;
man muss erst das r bzw. die Variable für static deklarieren
trotzdem danke
-
@NewbieCoding sagte in Warum funktioniert das Programm nicht wegen static int?:
habs gelöst
eine halbe Stunde nachdem die Lösung dasteht ...
Die Frage bleibt:
@Swordfish sagte in Warum funktioniert das Programm nicht wegen static int?:
Was anderes. In der Version ohne static ... welchen Wert hat denn
a.r
beiStisch a;
?Bonusfrage: Warum ist
struct foo { int bar; // eine definition aber hingegen static int qux; // "nur" eine deklaration }
?
Fragen über Fragen.
-
Dieser Beitrag wurde gelöscht!
-
Dieser Beitrag wurde gelöscht!
-
@Swordfish static int wurde nur definiert ?
der Compiler versteht das, aber es wurde noch nicht definiert. Zumindest so hab ich es jetzt verstanden.
-
-
@Swordfish Danke
-
Dieser Beitrag wurde gelöscht!