🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
7 messages
7 total messages Started by Thomas Simon Tue, 19 Dec 1995 19:12
statische Klassenkomponenten
#1047
Author: Thomas Simon
Date: Tue, 19 Dec 1995 19:12
38 lines
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
#1059
Author: Mike Wendler
Date: Wed, 20 Dec 1995 09:31
10 lines
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
#1063
Author: Joerg Koenig
Date: Wed, 20 Dec 1995 12:44
57 lines
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
#1066
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 13:13
27 lines
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
#1085
Author: Joachim Zobel
Date: Fri, 22 Dec 1995 05:53
16 lines
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
#1088
Author: Ulrich Moehrke
Date: Fri, 22 Dec 1995 14:14
18 lines
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
#1091
Author: Claus Faerber
Date: Fri, 22 Dec 1995 18:58
47 lines
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