PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ Doppelte Definition in Header-File ?



DanDanger
03-02-2003, 15:09
Hallo,

um mein Proggi möglichst einfach in andere Sprachen (Englisch, Franz. Suaheli, etc.) übersetzen zu können, möchte ich alle Ausgaben des Programms in einer Header-Datei namens "message.h" zusammenfassen.

Bei mir sieht das ungefähr so aus :




#ifndef __INC_message_h__
#define __INC_message_h__

char *Fehler = "Error" ;
char *Ausgabe = "Blablabla" ;
.
.
.
u.s.w

#endif



Mein Problem ist nun :
Wenn ich den Code in einer C-Datei (z.B. main.c) einbinde, ist alles OK,
sobald ich die message.h aber in zwei (oder mehr) C-Dateien einbinde, bekome ich vom Compiler den Fehler, dass die message.h doppelt definiert sei.....

Meine Farge : Was mache ich falsch ??

MfG
Daniel

ReSeT
03-02-2003, 15:35
Hi!

Dieses Problem habe ich auch gehabt und es lies sich seltsamerweise auch nicht durch #ifndef Direktiven beheben, die Du auch schon eingebunden hast.

ich habe das Problem dadurch gelöst, daß ein Header, der von mehreren Dateien benötigt wird eben nur einmal eingebunden wird.

Im Grunde genommen musst Du also eine main.c erzeugen, die alle notwendigen Header in der korrekten Reihenfolge einbindet, so daß sie Abhängigkeiten erfüllt sind. Letzten Endes darf ein benötigter Header ja auch nur einmal eingebunden werden, da sich der Compiler sonst über eine multiple definition beschwert.


GreetZ

ReSeT

anda_skoa
03-02-2003, 16:27
Bei jedem Include werden diese Konstanten neu definiert.
Das #ifndef schützt nur vor merhfachem Include, also wenn es schon durch einen anderen Header indirekt inkludiert wird.

Aber jedes .c File inkludiert es neu, weil da das HEADER_H noch nicht definiert ist.

Btw, wenn es um Überstetzung geht, gibt es da bessere Möglichkeiten
http://www.gnu.org/software/gettext/

Ciao,
_

brotzi
03-02-2003, 16:29
ich würde das so machen:

messages.c:
const char *Error = "Fehler";
...

messages.h:
#ifdef blabla usw.
extern const char* Error;
...
#endif

Gruß
AB

anda_skoa
03-02-2003, 18:08
Ja, so ist im Header nur die Deklaration und die Definition im Sourcefile.

Aber wie gesagt, gibt es für Übersetzungen ganz feine Tools :)
Damit kann man Sprachen zur Laufzeit hinzufügen.

Praktisch alle Freien Software Projekte benutzen mittlerweile diese Technik.

Ciao,
_