Anzeige:
Ergebnis 1 bis 3 von 3

Thema: #include über Kreuz

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    #include über Kreuz

    Hallo,

    ich habe mal wieder ein kleines Problem in c, wobei ich Euch um Eure Hilfe bitten möchte.
    Funktionen kann man ja vor ihrer Initialisierung bekannt machen um sie vorher schon verwenden zu können, doch wie Funktioniert so etwas mit Variablen?

    Beispiel
    Ich habe zwei Dateien xsql.h und data.h in denen ich einige struct'e initialisiere. Doch das struct aus xsql.h enthält Variablen aus data.h und umgekehrt.

    xsql.h
    Code:
    #include <sql.h> <-- Wichtige Variablendeklarationen
    #include "datei.h"
    
    typedef struct{
        SQLINT stelle;
        SQLCHAR type;
    } Coldescribe;
    
    
    typedef struct{
        SQLINT a;
        SQLCHAR c;
    } XSql;
    
    typedef struct{
        SQLINT k;
        XSql x;
        Data d;
    }XBig;

    data.h
    Code:
    #include "XSql.h"
    
    typedef struct{
        int x;
        Coldescribe desrcr;
    } Data;
    Ich könnte jetzt zwar das struct Coldescribe nach data.h verschieben und #include <sql.h> hinzufügen, doch eigentlich sollen die sql Deklarationen in xsql.h stehen. Auch zugegeben interessiert mich die Lösung des Problems.

    Vielen Dank im Vorraus!
    Grüße dml

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von dml Beitrag anzeigen
    Ich könnte jetzt zwar das struct Coldescribe nach data.h verschieben und #include <sql.h> hinzufügen, doch eigentlich sollen die sql Deklarationen in xsql.h stehen.
    Hmm, naja, da du ohnehin xsql.h in data.h inkludierst ist es schon eine Fortsetzung/Erweiterung von xsql.h, oder?

    Zitat Zitat von dml Beitrag anzeigen
    Auch zugegeben interessiert mich die Lösung des Problems.
    Generell ist eine derartige zyklische Abhängigkeit oft ein Indikator, dass etwas nicht in Ordnung ist. Zum Beispiel dass Datentypen nicht korrekt entworfen wurden oder zuviel auf einmal beinhalten.

    Eine Möglichkeit zumindest die Abhängigkeiten der Header zu durchbrechen sind Forward Declarations (obwohl ich mir da jetzt nicht sicher sind ob es die auch in C gibt, ich mache meistens C++).

    Also in etwas so
    Code:
    struct Coldescribe;
    
    typedef struct{
        int x;
        Coldescribe *desrcr;
    } Data;
    Dann muss der Header, in dem Coldescribe tatsächlich deklariert ist nur in den Dateien eingebunden werden, die mit Data.desrcr Interna arbeiten, bzw in der Datei, wo Data Instanzen angelegt werden (vermutlich data.c)

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Mein Logikfehler war, das ich Elemente von #include <sql.h> in data.h verwende und deshalb das struct Coldescribe nach data.h gehört, weshalb meine "Alles was mit Sql zu tun hat -> nach xsql.h" Ansicht falsch war.

    Danke anda_skoa.
    Geändert von dml (14-01-2013 um 15:01 Uhr) Grund: Grammatik

Lesezeichen

Berechtigungen

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