Wie kann ich eine Header-Datei mit einbinden?



  • eigentlich kann man doch per #include "Datei.h" eine Datei mit einbinden. Ich begreife das irgendwie nicht.

    Ich habe folgende Header Dateien:

    GProggysDlg.h
    CDaten.h
    c\firmen.h
    c\datei.h

    In CDaten.h ist eine zusätzliche Klasse vorhanden:

    // Nur als Beispiel;
    
    class CDaten {
      public:
        int x;
        int y;
    
        CString Int2String(int zahl) {
          CString txt;
          txt.Format("%d",zahl);
          return txt;
        };
    };
    

    In der Anwendung kann man, je nach Button auf den Firmen-Dialog bzw. Datei-Dialog zugreifen. Die Klasse CDaten möchte ich in beiden Header-Dateien nutzen können, wg. verschiedener Funktionen. Also habe ich in c\firmen.h die Zeile:

    #include "..\CDaten.h"
    
    ...
    public:
      CDaten cdaten;
    ...
    

    eingefügt. Geht ohne Probleme. Wenn ich das gleiche in c\datei.h mache erscheint eine Fehlermeldung:

    D:\VisualCData\GProggys\c\..\CDaten.h(1) : error C2011: 'CDaten' : 'class' type redefinition

    😕



  • Füge mal am Anfang Deiner Headerdateien includewächter ein:

    #ifdef INCLUDE_<DATEINAME.h> // oder irgendwie so
    #define INCLUDE_<DATEINAME.h>

    <das ganze Includezeugs>

    #endif

    alternativ bei VC am anfang ein #pragma once



  • Wenn ich es so angebe

    #ifdef INCLUDE_<"..\CDaten.h">
    #define INCLUDE_<"..\CDaten.h"> 
    #include "..\CDaten.h"
    #endif
    

    Dann gibts Fehler ohne Ende.......

    Ich versteh das nicht, andere Dateien kann man so oft "includen" wie man will, nur da klappt was nicht.



  • Jetzt geht es im Moment, und zwar so: Ich habe die #include-Anweisung nach der Klassendefinition geschrieben. Geht das gut so?

    ...
    class CGDatum : public CDialog
    {
    // Construction
    public:
    	CGDatum(CWnd* pParent = NULL);   // standard constructor
    
    	#include "..\CDaten.h"  // HIER HIN ???
    	CDaten cdaten;
    ...
    


  • Guten Abend !

    Probier mal ...

    #ifndef _HEADERNAME_H
    #define _HEADERNAME_H
    
    /*
      Hier jetzt den Code der Headerdatei einfügen
    */
    
    #endif // Headerfile - Ende
    

    Der Ausdruck HEADERNAME steht für den Namen deiner Header Datei.

    Gruß Michael



  • Danke Michael__W.! Es geht endlich.

    #ifndef _CDaten_H     // für die CDaten Klasse
    #define _CDaten_H
    #include "..\CDaten.h" 
    #endif
    

    🙂



  • Michael__W. schrieb:

    Guten Abend !

    Probier mal ...

    #ifndef _HEADERNAME_H
    #define _HEADERNAME_H
    
    /*
      Hier jetzt den Code der Headerdatei einfügen
    */
    
    #endif // Headerfile - Ende
    

    Der Ausdruck HEADERNAME steht für den Namen deiner Header Datei.

    So wars oben eigentlich gemeint 🤡 O🤡
    Gruß Michael



  • 🙂 😃 😉 🕶 🤡 😋 👍

    ... Da stand ich wohl auf meiner Leitung ...


Anmelden zum Antworten