Thread View: de.comp.lang.c++
10 messages
10 total messages
Started by Nik Wiesel
Tue, 19 Dec 1995 19:13
Linker Error , wer kann helfen?
Author: Nik Wiesel
Date: Tue, 19 Dec 1995 19:13
Date: Tue, 19 Dec 1995 19:13
78 lines
2545 bytes
2545 bytes
Hallo, bei folgendem kleinen C++ Beispiel erzeugt BC++ 4.52 folgenden Linker
Fehler:
Linking t.exe:
Linker Warning: Possible reference to undefined extern A::Konst in module T.CPP
Linker Error: Undefined symbol A::Konst in module T.CPP
Wer kann mir erklaeren wie es dazu kommt? Wieso kompiliert er das Modul, linkt
es aber nicht?
Hier nun das Beispiel:
//*******************************************************
// C++ Beispiel: Zeigt Klassendeklaration und -definition
//*******************************************************
#include <CONIO.H>
#include <stdio.h>
#include <string.h>
//*******************
// Klasse deklarieren
//*******************
class A {
private:
static char Konst[8];
public: // Elemente oeffentlich machen
short int Wert,Wert1; // Variable deklarieren
A(void); // Konstruktor deklarieren (immer Klassenname)
~A(void); // Destruktor deklarieren (immer ~Klassenname)
void Test(void); // Methode deklarieren
};
//********************
// Methoden definieren
//********************
A::A(void) { // Konstruktor definieren
strcpy(Konst,"Test");
printf("Konstruktor! Wert=$%.4X\n",Wert);
printf("Konst=$%.4X\n",Konst);
};
A::~A(void) { // Destruktor definieren
printf("Destruktor! Wert=$%.4X\n",Wert);
printf("Konst=$%.4X\n",Konst);
};
void A::Test(void) { // Methode definieren
static int W=0; // Statische Variable
printf("Wert (%d)\n",++W); // Wert ausgeben
printf("Konst=$%.4X\n",Konst);
};
//**************
// Hauptprogramm
//**************
void main() {
//---------------------------------------------------------------------------
A Klasse1,Klasse2; // Zwei Instanzen der Klasse A erzeugen
Klasse1.Test(); // Ohne Klammern = NOP
};
Antworten bitte auch an folgende email Adresse
Danke im voraus...
------------------------------
Nik Wiesel: UZS198@UNI-BONN.DE
=========================================================================
The above statement is my own opinion and does not represent the point of
view of any organization I am related to.
=========================================================================
Re: Linker Error , wer kann helfen?
Author: Walter Sommergruber
Date: Wed, 20 Dec 1995 05:27
Date: Wed, 20 Dec 1995 05:27
28 lines
1292 bytes
1292 bytes
Nik Wiesel (uzs198@uni-bonn.de) wrote on 19.12.95
about "Linker Error , wer kann helfen?":
> Linking t.exe:
> Linker Warning: Possible reference to undefined extern A::Konst in module
> T.CPP Linker Error: Undefined symbol A::Konst in module T.CPP
> class A
> {
> private:
> static char Konst[8];
> public:
> short int Wert,Wert1;
> A(void);
> ~A(void);
> void Test(void);
> };
In Deinem Beispielprogramm fehlt ein
char A::Konst[8];
Statische Membervariablen muessen auf Fileebene definiert und
initialisiert werden...
Deine Frage wird uebrigens auch in der C++ FAQ beantwortet (Q129)
deren Lektuere sehr zu empfehlen ist.
--- Take a look at ...
Walter Sommergruber The Software Site
email: wsog@softsite.co.at http://www.softsite.co.at/softsite/
Re: Linker Error , wer kann helfen?
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:11
Date: Wed, 20 Dec 1995 09:11
22 lines
891 bytes
891 bytes
Hallo Nik,
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.
Ciao, Dirk
Re: Linker Error , wer kann helfen?
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:12
Date: Wed, 20 Dec 1995 09:12
22 lines
891 bytes
891 bytes
Hallo Nik,
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.
Ciao, Dirk
Re: Linker Error , wer kann helfen?
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:14
Date: Wed, 20 Dec 1995 09:14
22 lines
891 bytes
891 bytes
Hallo Nik,
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.
Ciao, Dirk
Re: Linker Error , wer kann helfen?
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:18
Date: Wed, 20 Dec 1995 09:18
22 lines
891 bytes
891 bytes
Hallo Nik,
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.
Ciao, Dirk
Re: Linker Error , wer kann helfen?
Author: Joerg Koenig
Date: Wed, 20 Dec 1995 12:37
Date: Wed, 20 Dec 1995 12:37
27 lines
1256 bytes
1256 bytes
In article <uzs198.299.00166F73@uni-bonn.de>, uzs198@uni-bonn.de (Nik Wiesel) says: > >Hallo, bei folgendem kleinen C++ Beispiel erzeugt BC++ 4.52 folgenden Linker >Fehler: > >Linking t.exe: >Linker Warning: Possible reference to undefined extern A::Konst in module T.CPP >Linker Error: Undefined symbol A::Konst in module T.CPP > >Wer kann mir erklaeren wie es dazu kommt? Wieso kompiliert er das Modul, linkt >es aber nicht? Im Definitions-Modul der Klasse A muss die Variable "Konst" natuerlich noch angelegt werden: char A::Konst[8] ; Ansonsten hast Du ein Beispiel abgeschickt, das auf hervorragende Weise zeigt, wie man eine Source mit bescheuerten Kommentaren so zumuellen kann, dass es einem schwummerig wird, wenn man es lesen muss (ganz davon abgesehen, dass das Beispiel in sich schon recht merkwuerdig ist ...). Tschuess Joerg
Re: Linker Error , wer kann helfen?
Author: Karl-Heinz Krause
Date: Wed, 20 Dec 1995 17:14
Date: Wed, 20 Dec 1995 17:14
28 lines
1271 bytes
1271 bytes
Am 19. Dez. 1995 schrieb Nik Wiesel (uzs198@uni-bonn.de): > Hallo, bei folgendem kleinen C++ Beispiel erzeugt BC++ 4.52 folgenden Linker > Fehler: > Linking t.exe: > Linker Warning: Possible reference to undefined extern A::Konst in module T.CPP > Linker Error: Undefined symbol A::Konst in module T.CPP > Wer kann mir erklaeren wie es dazu kommt? Wieso kompiliert er das Modul, linkt > es aber nicht? [...] Es fehlt die Definition der statischen Membervariablen Konst. Durch das Erwähnen dieser Variablen in der Klassendefinition, wird Konst nur deklariert. Irgendwo muß im Programm noch stehen char A::Konst[8]; > Antworten bitte auch an folgende email Adresse > Danke im voraus... Ich fürchte, daß eine Mail an "Danke im voraus..." nicht ankommen wird. Karl-Heinz Krause
Re: Linker Error , wer kann helfen?
Author: Claus Faerber
Date: Wed, 20 Dec 1995 18:13
Date: Wed, 20 Dec 1995 18:13
50 lines
1671 bytes
1671 bytes
uzs198@uni-bonn.de (19 Dec 95):
> Hallo, bei folgendem kleinen C++ Beispiel erzeugt BC++ 4.52 folgenden Linker
> Fehler:
>
> Linking t.exe:
> Linker Warning: Possible reference to undefined extern A::Konst in module
> T.CPP Linker Error: Undefined symbol A::Konst in module T.CPP
>
> Wer kann mir erklaeren wie es dazu kommt? Wieso kompiliert er das Modul,
> linkt es aber nicht?
>
>
> Hier nun das Beispiel:
>
[[...]]
>
> //*******************
> // Klasse deklarieren
> //*******************
> class A {
>
> private:
> static char Konst[8];
// ^^^^^^^^^^^^^^^^^^^^^
// Das erzeugt nicht die Variable selbst, sondern heisst, dass die Variable
// *irgendwo* vorhanden ist.
[[...]]
>
> //********************
> // Methoden definieren
> //********************
// Du musst also in irgendeinem Modul (.CPP) einen Platz fuer die Variable
// belegen:
char A::Konst[8] = "BlaBla.";
> A::A(void) { // Konstruktor definieren
[[...]]
>
> Antworten bitte auch an folgende email Adresse
> Danke im voraus...
===========================================================================
Claus Andre Faerber <claus@faerber.muc.de>
Mitterfeldstrasse 20 * D-83043 Bad Aibling * Germany * fax: +49-8061-2057
===========================================================================
Re: Linker Error , wer kann helfen?
Author: Claus Faerber
Date: Wed, 20 Dec 1995 18:35
Date: Wed, 20 Dec 1995 18:35
32 lines
1128 bytes
1128 bytes
Dirk.Jansen@KTE.X400.BASF-AG.DE (20 Dec 95):
> Hallo Nik,
>
> statische Variablen muessen zusaetzlich zur Deklaration noch
> explizit definiert werden.
>
> ****************** Beispiel:
>
> class A
> {
> private:
> static char Konst[8]; // Deklaration
> };
>
> char A::Konst[8]; // Definition !!!
aber bitte *nicht* im include file!!!
>
> *******************
>
> Danach kannst Du die Variable Konst in deinen Methoden
> benutzen.
>
>
> Ciao, Dirk
===========================================================================
Claus Andre Faerber <claus@faerber.muc.de>
Mitterfeldstrasse 20 * D-83043 Bad Aibling * Germany * fax: +49-8061-2057
===========================================================================
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