Problem mit Mehrfachdeklaration



  • Hi zusammen,

    habe eine Klasse namens "Messungsvorgang":

    #include "Keithley2000.h"
    #include "FormMain.h"
    /*----------------------------------------------------------------------------*/
    /*Klasse um die Messwerte vom Multimeter auszulesen (Ohm-wert) und dann in ---*/
    /*einen Grad-Wert umzurechnen-------------------------------------------------*/
    
    class Messungsvorgang //Hier kommt der Fehler!!!!!!!!!!!!!!!!!!!!!!!
    {
    public:
    TKeithley2000 *DMM;
    /*Konstruktor der Klasse > Setzt die richtigen Einstellungen des Multimeters--*/  
    __fastcall Messungsvorgang(void);
    
    /*Gibt Messwert zurück--------------------------------------------------------*/
    double getMesswert();
    };
    

    Jetzt habe ich ja die FormMain.h eingebunden um quasi auf meine Progressbar zuzugreifen!

    Meine FormMain.h:

    //---------------------------------------------------------------------------
    
    #ifndef FormMainH
    #define FormMainH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include "Messungsvorgang.h"
    #include <ComCtrls.hpp>
    #include <Chart.hpp>
    #include <ExtCtrls.hpp>
    #include <TeEngine.hpp>
    #include <TeeProcs.hpp>
    #include <Series.hpp>
    
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:
       TPageControl *PageControl1;
       TTabSheet *TabMesswerteListe;
       TTabSheet *TabMesswerteGrafik;
       TListBox *MesswerteListe;
       TButton *Messen;
       TChart *MesswertGrafik;
       TFastLineSeries *Series1;
       TLabel *Label1;
       TLabel *AktuellerMesswertLabel;
       TLabel *Label2;
       TLabel *AktuelleMessungLabel;
       TProgressBar *FortschrittBar;
       TLabel *InfoFortschrittLabel;
       void __fastcall MessenClick(TObject *Sender);
    private:
    public:
       __fastcall TForm1(TComponent* Owner);
        Messungsvorgang *messvorgang;
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    

    Jetzt kommen die Fehler:

    [C++ Fehler] MESSUNGSVORGANG.H(8): E2238 Bezeichner 'Messungsvorgang' mehrfach deklariert
    [C++ Warnung] BasisFunktionen.h(72): W8058 Präcompilierter Header: Initialisierte Daten im Header kann nicht erzeugt werden.

    Warum bekomm ich diese Fehler.
    Habe ich was falsch gemacht?

    Danke Bench



  • Hallo

    Zunächsteinmal sind Kreuzincludes unzulässig.

    // FormMain.h
    #include "Messungsvorgang.h"
    ...
    
    // Messungsvorgang.h
    #include "FormMain.h"
    ...
    

    Sinnvollerweise sollte nur FormMain.h die Klasse Messungsvorgang einbinden.

    Außerdem fehlen in Messungsvorgang.h die Include Guards.

    bis bald
    akari



  • #ifndef
    #define
    #endif
    

    Sind das die include-Guards?



  • Yep.



  • Hi,

    erstmal danke!!!
    ok versteh ich!!
    Ist mir auch irgendwie klar.

    Ok habe folgendes nun zusätzlich in meine Klasse geschrieben:

    #ifndef MESSUNGSVORGANGH
    #define MESSUNGSVORGANGH
    ....
    #endif
    

    Somit ist die Doppeldeklaration hinfällig, oder!
    Weil ja das über die if-Abfrage getestet wird!

    Aber wenn nun ein Kreuzinclude schlecht ist, wie kann ich dann auf die elemente der Form aus meiner anderen Klasse zugreifen???
    Wie ist es dann formal besser?

    Danke Bench



  • Entkopple die Klasse Messungsvorgang von dem Formular, sie hat nichts mit der GUI zu tun. Wenn Du unbedingt eine Progressbar in dieser Klasse schieben willst, dann übergibt die Progressbar an die Klasse oder eine Callback-Funktion.


Anmelden zum Antworten