Klasse extern

TimN

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

config.h
Code:
class config
{
[...]
}

main.cpp
Code:
#include "config.h"
 
config *con = new config();

funktionen.cpp
Code:
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:
Code:
#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?
 
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.
 
Hast du die Präprozessor Angaben hinzugefügt ?
Also:

Code:
#ifndef _CONFIG_H_
#define _CONFIG_H_

class Config
{
[...]
}
#endif

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

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

Gruß,
Christian
 
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ß
 
Zuletzt bearbeitet:
Zitat:
Zitat von Mr.Undertaker
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.
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
 
Zurück