Thread View: de.comp.lang.c++
7 messages
7 total messages
Started by Thomas Simon
Tue, 19 Dec 1995 19:12
statische Klassenkomponenten
Author: Thomas Simon
Date: Tue, 19 Dec 1995 19:12
Date: Tue, 19 Dec 1995 19:12
38 lines
973 bytes
973 bytes
Hallo Welt,
Ich habe versucht das folgende C++ Programm durch den gnu g++ version 2.6.0
zu jagen.
#include <iostream.h>
class A {
public:
static int k;
static int give() { return k; };
};
int main()
{
cout << A::give();
}
Und habe die folgende Fehlermeldung erhalten.
g++ -g -o test6 test6.cc
ld: Undefined symbol
__1A$k
collect2: ld returned 2 exit status
Kann mir vielleicht jemand erklaeren, warum das nicht erlaubt ist ???
Oder ist dies erst bei einer hoeheren g++ Version erlaubt ??
Tschuess
Thomas
Re: statische Klassenkomponenten
Author: Mike Wendler
Date: Wed, 20 Dec 1995 09:31
Date: Wed, 20 Dec 1995 09:31
10 lines
878 bytes
878 bytes
Hi Thomas, der Compiler hat voellig recht, die member variable 'k' ist nirgends definiert, sondern nur deklariert. Statische member variablen muessen ausserhalb der Klassendeklaration definiert werden, z.B. so: int A::k; // optional auch mit Initialisierer z.B.' = 0;' Ciao, Mike. wendler@ike.uni-stuttgart.de
Re: statische Klassenkomponenten
Author: Joerg Koenig
Date: Wed, 20 Dec 1995 12:44
Date: Wed, 20 Dec 1995 12:44
57 lines
1574 bytes
1574 bytes
In article <1995Dec19.201232@alma.student.uni-kl.de>, tsimon@student.uni-kl.de (Thomas Simon) says:
>
>
>Hallo Welt,
>
>Ich habe versucht das folgende C++ Programm durch den gnu g++ version 2.6.0
>zu jagen.
>
>#include <iostream.h>
>
>class A {
>
> public:
>
> static int k;
> static int give() { return k; };
>
>};
>
int A::k ;
static data members muessen separat definiert werden, da sie vom
Compiler wie globale Variablen behandelt werden. Sonst koennten
nicht mehrere Instancen auf das gleiche Daten-Element zugreifen.
>
>int main()
>{
> cout << A::give();
>}
>
>Und habe die folgende Fehlermeldung erhalten.
>
>g++ -g -o test6 test6.cc
>ld: Undefined symbol
> __1A$k
>collect2: ld returned 2 exit status
>
>
>Kann mir vielleicht jemand erklaeren, warum das nicht erlaubt ist ???
Deklarierte, aber nicht definierte Variablen zu benutzen ist schon
immer nicht erlaubt gewesen, sogar im allerersten "C" ...
>Oder ist dies erst bei einer hoeheren g++ Version erlaubt ??
Das wird auch in Zukunft in keiner Compiler-Version erlaubt sein,
vermute ich ganz stark.
>
>Tschuess
>
> Thomas
>
Joerg
Re: statische Klassenkomponenten
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 13:13
Date: Wed, 20 Dec 1995 13:13
27 lines
919 bytes
919 bytes
Hallo Thomas,
statische Variablen müssen zusätzlich zur Deklaration noch
explizit definiert werden.
****************** Beispiel:
class A
{
private:
static char Konst[8]; // Deklaration
};
char A::Konst[8]; // Definition !!!
*******************
Danach kannst Du die Variable Konst in deinen Methoden
benutzen.
Tschuess
Dirk
Re: statische Klassenkomponenten
Author: Joachim Zobel
Date: Fri, 22 Dec 1995 05:53
Date: Fri, 22 Dec 1995 05:53
16 lines
1136 bytes
1136 bytes
Mike Wendler <wendler@ike.uni-stuttgart.de> wrote: >der Compiler hat voellig recht, die member variable 'k' ist nirgends >definiert, sondern nur deklariert. Statische member variablen muessen >ausserhalb der Klassendeklaration definiert werden, z.B. so: > int A::k; // optional auch mit Initialisierer z.B.' = 0;' Das kann der Compiler doch gar nicht wissen. Der Linker wird natürlich nörgeln. MSVC 1.5 compiliert das ganze ohne Warnung, wenn main einen Wert returnt. Joachim "Man faengt Forellen mit der Hand, indem man zuerst ihr Vertrauen gewinnt und es dann missbraucht." Robert A. Heinlein
Re: statische Klassenkomponenten
Author: Ulrich Moehrke
Date: Fri, 22 Dec 1995 14:14
Date: Fri, 22 Dec 1995 14:14
18 lines
1002 bytes
1002 bytes
In article <4bdn42$k8g@news.rrz.uni-koeln.de>, Joachim Zobel <a2597420@athena.rrz.uni-koeln.de> wrote: >Mike Wendler <wendler@ike.uni-stuttgart.de> wrote: >>der Compiler hat voellig recht, die member variable 'k' ist nirgends >>definiert, sondern nur deklariert. Statische member variablen muessen > >Das kann der Compiler doch gar nicht wissen. Der Linker wird natürlich >nörgeln. Es hat auch der Linker gemeckert. Versuch mal g++ -g -c test.cc -o test.o und dann g++ test.o Ulli
Re: statische Klassenkomponenten
Author: Claus Faerber
Date: Fri, 22 Dec 1995 18:58
Date: Fri, 22 Dec 1995 18:58
47 lines
1565 bytes
1565 bytes
tsimon@student.uni-kl.de (19 Dec 95):
>
> Hallo Welt,
>
> Ich habe versucht das folgende C++ Programm durch den gnu g++ version 2.6.0
> zu jagen.
>
> #include <iostream.h>
>
> class A {
>
> public:
>
> static int k;
> static int give() { return k; };
>
> };
int A::k = 0;
> int main()
> {
> cout << A::give();
> }
>
> Und habe die folgende Fehlermeldung erhalten.
>
> g++ -g -o test6 test6.cc
> ld: Undefined symbol
> __1A$k
> collect2: ld returned 2 exit status
Du hast A::k zwar in der Klassendefinition angegeben, aber fuer statische
Variablen muss irgendwo noch ein Platz im Datensegment reserviert werden.
Das ist auch, was Dir der Linker mit der Fehlermeldung mitteilen wollte.
> Kann mir vielleicht jemand erklaeren, warum das nicht erlaubt ist ???
> Oder ist dies erst bei einer hoeheren g++ Version erlaubt ??
Das ist bei **KEINEM** C++-Compiler erlaubt, es fehlt einfach was.
/\ Frohe ======================================================
/ \ Weihnachten Claus Andre Faerber <claus@faerber.muc.de>
/_ _\ Merry Mitterfeldstrasse 20 * D-83043 Bad Aibling * Germany
|| Christmas ======================================================
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads