Anzeige:
Ergebnis 1 bis 5 von 5

Thema: C/C++ Doppelte Definition in Header-File ?

  1. #1
    Registrierter Benutzer Avatar von DanDanger
    Registriert seit
    15.12.2001
    Ort
    /home/dandanger
    Beiträge
    130

    C/C++ Doppelte Definition in Header-File ?

    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 :

    Code:
    #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
    ------------------------------------
    DanDanger

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.02.2002
    Ort
    2nd level cache
    Beiträge
    90
    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
    Einmal schwarzen Tee mit Milch und Zucker bitte!

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    16.09.2002
    Beiträge
    73
    ich würde das so machen:

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

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

    Gruß
    AB

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •