externe variablen problem



  • hi,

    ich habe ein projekt mit insgesamt 10 datei. 5 davon spielen bei meinem problem eine rolle:

    in einer globaldef habe ich 3 variablen stehen. diese möchte ich als extern nutzen. deklariert habe ich diese aber bisher nur mit datentyp var.
    2 dateien sollen diese variablen nutzen. die eine zum setzen dieser mit true oder false, die andere zum abfragen der werte.
    wenn ich jetzt in beiden dateien die globaldef includiere und die variablen in beiden datei noch mal als extern datentyp var deklariere, denn meckert mir der linker rum, dass ich die variablen zu oft definiert habe.

    wie und wo kann ich die variablen am besten als extern deklarieren bzw. wie und wo muss ich die globaldef inkludieren.

    besten dank

    bastian



  • globaldef.c

    int gProgStatus;
    
    ...
    

    globaldef.h

    #ifndef GLOBALDEF_H
    #define GLOBALDEF_H
    
    extern int gProgStatus;
    
    ...
    #endif
    

    Jetzt brauchst du nur mehr überall wo du die globalen Variablen brauchst die globaldef.h includieren, welche ja auch auf doppeltes includieren geschützt ist.



  • dachte ich auch erst aber bei mir will das nicht so.

    wenn ich das so mache, wie du geschrieben hast und ich dann in der anderen c-datei nur das headerfile mit den externen variablen includiere und die variablen dann da abfragen will, kennt der sie wieder nicht.

    er wenn ich sie in dieser c-datei nochmals mit datentyp var definiere, meckert er nicht rum, meint aber als warning: datentyp var might be used uninitialized in this function.

    bastian



  • Was für einen Compieler verwendest du? Du musst natürlich die globaldef.c auch mit compilieren.



  • ich nutze den gcc-compiler unter linux.
    kompilieren tue ich alle files zusammen. ich inkludiere auch die, die ich benötige. daran liegt es nicht. ist ein qt-project

    bastian



  • @bigdaddy
    Zeig mal deine globaldef.c und globaldef.h und deine includes in der anderen Datei.



  • also in meiner config.h steht:

    extern bool var1
    extern bool var2
    extern bool var3
    

    in meiner config.c:

    #include "config.h"

    bool var1
    bool var2
    bool var3
    

    in der 2. c-datei, die die var abfragen soll habe ich drin:

    bool var1
    bool var2
    bool var3
    

    und wenn ich hier kein include der config.h mache meckert er rum, dass die var nicht definiert sind.

    bastian



  • Genau in der 2. c-datei liegt dein Problem:

    Wenn die die Variablen nutzen willst tust du nur in der 2. c-datei die config.h includieren und sonst nichts mehr. Einfach genau so wie ich es dir vorher beschrieben habe.

    in der 2. c-datei, die die var abfragen soll drin sein:

    #include "config.h"
    /* und sonst nichts mehr machen, und schon kannste die variablen verwenden */
    

    Und ausserdem solltest du in die config.c nicht die config.h includieren.



  • Also, in deiner config.h sollte es so aussehen:

    #ifndef CONFIG_H
    #define CONFIG_H
    
    extern bool var1
    extern bool var2
    extern bool var3
    
    #endif
    

    Deine config.c dürfte so passen.

    In den anderen c-Dateien darfst du nur noch config.h includieren!

    Beim Kompilieren musst du natürlich die config.c auch mitkompilieren.



  • ich kompilere ja alles aber er meldet mir jedes mal den fehler, dass in der 2. c-datei die variablen nicht deklariert sind, obwohl ich alles so gemacht habe.

    ich brauche aber in meiner config.c das include "config.h".
    programmiere mit qt und in der config.h ist mein standardkonstruktor und in der config.cpp brauche ich den eben.

    bastian



  • Warum machst du diese Variablen nicht static und tust sie zu einer Klasse dazu?



  • das ist wohl die beste idee!
    warum bin ich da nicht selber draufgekommen!? 🙂

    danke

    bastian



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten