🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#1044
Author: Nik Wiesel
Date: Tue, 19 Dec 1995 19:13
78 lines
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?
#1052
Author: Walter Sommergruber
Date: Wed, 20 Dec 1995 05:27
28 lines
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?
#1053
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:11
22 lines
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?
#1054
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:12
22 lines
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?
#1055
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:14
22 lines
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?
#1056
Author: Dirk Jansen
Date: Wed, 20 Dec 1995 09:18
22 lines
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?
#1062
Author: Joerg Koenig
Date: Wed, 20 Dec 1995 12:37
27 lines
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?
#1095
Author: Karl-Heinz Krause
Date: Wed, 20 Dec 1995 17:14
28 lines
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?
#1075
Author: Claus Faerber
Date: Wed, 20 Dec 1995 18:13
50 lines
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?
#1077
Author: Claus Faerber
Date: Wed, 20 Dec 1995 18:35
32 lines
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