# Klasse extern



## TimN (1. Februar 2006)

Hallo,
um mein Problem zu beschreiben, fange ich mal damit an, die Struktur des ganzen zu posten:

config.h

```
class config
{
[...]
}
```
 
main.cpp

```
#include "config.h"
 
config *con = new config();
```
 
funktionen.cpp

```
extern config *con;
 
con->asd();
```
 
main.cpp und funktionen.cpp sind im gleichen Projekt.
Wenn ich das ganze jetzt compiliere, bekomme ich den Fehler, dass 'config' nicht bekannt ist.
Da bin ich auf die idee gekommen, an den Anfang von der funktionen.cpp folgende Zeile einzufügen:

```
#include "config.h
```
 
...ja, zu früh gefreut...
Jetzt bekomme ich die Linker-Fehler, dass die ganzen Funktionen von config schon in main.obj definiert sind.


Wie muss ich das ganze einbinden, damit das Funktioniert?


----------



## jokey2 (1. Februar 2006)

Du scheinst in der config.h nicht nur die Klasse deklariert zu haben, sondern auch die Funktionsdefinitionen zu haben. Diese solltest Du in eine Datei config.cpp auslagern.


----------



## Mr.Undertaker (3. Februar 2006)

Hast du die Präprozessor Angaben hinzugefügt ?
Also:


```
#ifndef _CONFIG_H_
#define _CONFIG_H_

class Config
{
[...]
}
#endif
```

Weiterhin solltest du um Verwirrungen zu vermeiden, den Klassennamen groß schreiben... also Config.



> funktionen.cpp:
> 
> 
> 
> ...


Ist *extern* wirklich nötig ? Ich vermute nicht ;-) 
Übergebe doch einfach den Pointer der Config-Klasse an die Funktion.

Gruß, 
Christian


----------



## deepthroat (3. Februar 2006)

Hi.





			
				Mr.Undertaker hat gesagt.:
			
		

> Ist *extern* wirklich nötig ? Ich vermute nicht ;-)


Doch, das ist hier auf jeden Fall notwendig denn es soll ja keine neue Variable definiert werden sondern nur Bezug auf eine externe Variable genommen werden.

Allerdings würde ich die extern Deklaration in die config.h Datei schreiben und die Variable con in der config.cpp Datei definieren (und zu 0 initialisieren). Die Variable kann ja dann (trotzdem) in der main.cpp richtig initialisiert werden. Evtl. ist es auch unnötig einen Pointer zu verwenden? (denk dran den Pointer auch wieder mit delete freizugeben).


Gruß


----------



## Mr.Undertaker (3. Februar 2006)

> Zitat:
> 
> 
> > Zitat von Mr.Undertaker
> ...


Ich wollte sagen, dass es vermutlich eine andere Lösung gibt. 
Ich vermeide *extern* soweit es geht. Es gibt IMHO meist schönere Ansätze.

Gruß, 
Christian


----------

