Bug im Builder oder "wie mach das mit den Headerdatien und dem includieren richtig"



  • Hiho zusammen,

    ich hab ein kleiens Problem mit meinem Builder (Version 5 Build 12.34) Fast immer wenn ich eine Änderung am Code vornehmen will und danach versuche das Programm zu kompilieren, bekomme ich eine Fehlermeldung die da sagt:

    Fehler in der Deklarationssyntax

    Wundersamerweise verschwindet die Fehlermeldung bei einem erneuten (OHNE Änderung) kompilieren (meistens) wieder wie von selbst. In seltenen Fällen ist er aber resistent und ich muss noch ein bischen die Reihenfolge der Einbindungen ändern damit es (wieder OHNE Veränderungen am eigentlichen Code) funktioniert.

    Das hört sich jetzt zwar an wie beim Gläserrücken aber ich steig da echt nicht durch. Habt ihr eine Ahnung an was das liegen könnte??

    thx

    meeee



  • Hi,

    Echt ein komisches Phänomen. Welche Header bindest du denn ein, vielleicht wäre ja ein bischen Beispiel-Code hilfreich. Ich habe zwar im Augenblick keine Idee was das sein könnte.



  • Hi,

    also hier mal meine Header-Dateien und die #includes aus den cpp Dateien

    Die Datei p1:

    #ifndef p1H
    #define p1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Buttons.hpp>
    #include <Dialogs.hpp>
    #include <ComCtrls.hpp>
    #include <Menus.hpp>
    #include <ToolWin.hpp>
    #include <ImgList.hpp>
    #include <ExtCtrls.hpp>
    #include <Graphics.hpp>
    #include <Grids.hpp>
    
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TOpenDialog *OpenDialog1;
            TSaveDialog *SaveDialog1;
            TMainMenu *MainMenu1;
            TMenuItem *Datei1;
            TToolBar *ToolBar1;
            TImageList *ImageList1;
            TToolButton *ToolButton2;
            TToolButton *ToolButton4;
            TToolButton *ToolButton5;
            TMenuItem *ffnen1;
            TMenuItem *Speichernunter1;
            TStatusBar *StatusBar1;
            TStringGrid *StringGrid1;
            TComboBox *ComboBox1;
            TMenuItem *Dateischlieen1;
            TMenuItem *Hilfe1;
            TMenuItem *ParserInformationen1;
            TToolButton *ToolButton1;
            TToolButton *ToolButton3;
            TCheckBox *CheckBox1;
            TToolButton *ToolButton6;
    
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall ffnen1Click(TObject *Sender);
            void __fastcall ToolButton5Click(TObject *Sender);
            void __fastcall StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect);
            void __fastcall Beenden1Click(TObject *Sender);
            void __fastcall ToolButton4Click(TObject *Sender);
            void __fastcall StringGrid1Click(TObject *Sender);
            void __fastcall ComboBox1Change(TObject *Sender);
            void __fastcall Dateischlieen1Click(TObject *Sender);
            void __fastcall ParserInformationen1Click(TObject *Sender);
            void __fastcall Button1Click(TObject *Sender);
            void __fastcall ToolButton2Click(TObject *Sender);
            void __fastcall Speichernunter1Click(TObject *Sender);
    
            private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    /****************************************************************************
    //Include Teil
    
    #include <vcl.h>
    #pragma hdrstop
    #include "p1.h"
    #include "hilfe.h"
    #include "Lib_01.h"
    #include "Lib_02.h"
    

    Die Datei Lib_01:

    #ifndef Lib_01.h
    #define Lib_01.h
    #define Prg_MaxCar 500
    #define Prg_MaxStr  50
    #define Prg_MaxTok 200
    #define AnzahlAskZ  7
    #define AnzahlAskS  6
    #define AnzahlDef   4
    #define AnzahlCalc  6
    
    //------------------------------------------------------------------------------//
    
    typedef struct {
    
    int Typ;
    
    char S1[Prg_MaxCar];                                                            //Einzele Tokens
    char S2[Prg_MaxCar];
    char S3[Prg_MaxCar];
    char S4[Prg_MaxCar];
    
    int nummer;                                                                     //Der wievielte Parserbefehl
    
    char E1[Prg_MaxCar];                                                            //Ergebnis
    
    }                                                                               //
    Prg_IntTyp;                                                                     //
    //------------------------------------------------------------------------------//
    
    //------------------------------------------------------------------------------//
    typedef struct                                                                  //Parameter Struktur für Berechnungen
    {                                                                               //Variablenname und Wert
    char Name[Prg_MaxCar];
    double Val;
    
    }                                                                               //
    Prg_ParTyp;                                                                     //
    //------------------------------------------------------------------------------//
    //------------------------------------------------------------------------------//
    typedef struct                                                                  //
    {
    char       Fld[Prg_MaxCar];
    Prg_IntTyp Anw[Prg_MaxCar];
    
    }                                                                               //
    Prg_StrTyp;                                                                     //
    //------------------------------------------------------------------------------//
    //------------------------------------------------------------------------------//
    typedef struct                                                                  //
    {                                                                               //
    Prg_StrTyp Str[Prg_MaxStr]; int nStr;
    Prg_ParTyp Par[Prg_MaxStr]; int nPar;
    int position[Prg_MaxStr];                                                       //Position von Typ1&2 im gesamten Array
    int einszwei;                                                                   //Anzahl der Tpyen 1&2
    
    }                                                                               //
    Prg_DatTyp;                                                                     //
    //------------------------------------------------------------------------------//
    int Prg_IniPrg(Prg_DatTyp *);                                                           //Initalisierungsphase
    
    int Prg_OpnFil(Prg_DatTyp*);                                                    //Öffnen der Datei und einlesen
                                                                                    //der Tokens
                                    //Methode zum Pointer auf Tokens erzeugen
        int Prg_SetAskZ(char **P,Prg_IntTyp* I,Prg_ParTyp *Par,int n);              //Belegungsroutinen
        int Prg_SetAskS(char **P,Prg_IntTyp* I,Prg_ParTyp *Par,int n);
        int Prg_SetCalc(char **P,Prg_IntTyp* I,Prg_ParTyp *Par,int n);
        int Prg_SetDef (char **P,Prg_IntTyp* I,Prg_ParTyp *Par,int n);
                                      //Fehlermeldungsmessagebox
    
    int Prg_Fill(Prg_DatTyp *I);                                                    //Dateien in Grid füllen
    
    int Prg_Take_Edit(Prg_DatTyp *D,TStringGrid *G);                                //Dateien aus Grid übernehmen
    
    int Prg_Calc(Prg_DatTyp *D);                                                    //Berechnungen durchführen
    
    int Prg_Run(Prg_DatTyp *D);                                                     //Schreiben in die Ausgangsdatei
    
                                                           //ComboBox platzieren
    
    int Prg_UpdateHelp(Prg_DatTyp *D);
    
    #endif
    //------------------------------------------------------------------------------//
    //*******************************************************
    Include Teil
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "p1.h"
    #include <Math.h>
    #include "Etc.h"
    #include "Lib_01.h"
    #include "hilfe.h"
    
    #include "Lib_02.h"
    

    Die Datei Lib_02:

    #ifndef Lib_02.h
    #define Lib_02.h
    
    int Prg_GetPnt (char* s,char** P,int z,char c);
    int Prg_Alert(int fehler, int anzahl, int a);
    int Prg_GridEdit(bool a);                                                       //Grid Editable or Non-Editable
    int PlaceComboBox (void);
    int Prg_Close(void);
    int Prg_OpenToSave(TOpenDialog *O, TSaveDialog *S);
    int Prg_Interface(TSaveDialog *S);
    int Prg_Delete(Prg_DatTyp *D);
    int Prg_Save(Prg_DatTyp *D,TStringGrid *G);
    int Prg_WriteDef(Prg_DatTyp *D);
    
    #endif
    
    //**************************************
    //Include Teil
    #include "p1.h"
    #include <Math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "Lib_01.h"
    #include "Lib_02.h"
    #include "hilfe.h"
    #include "Etc.h"
    #define Interface "name.txt"
    

    Die Etc Datei:

    #ifndef Etc.h
    #define Etc.h
    
    int Etc_RmvPro();
    int Etc_ShwMsg(char*);
    int Etc_ShwMsg(char*,double);
    int Etc_ShwMsg(char*,int   );
    int Etc_ShwMsg(char* FMT,int    I1, int I2);
    int Etc_ShwMsg(char* FMT,int    I1, int I2, int I3);
    int Etc_ShwMsg(char* FMT,char*  C1);
    int Etc_CopyFile();
    int Etc_RedStr(FILE *d,char *S,char s1,char s2);
    
    #endif
    
    //******************************
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include "Etc.h"
    #include <vcl.h>
    #define ProFil "Log.txt"
    

    Sorry für den vielen Code, aber ich hab leider keine Ahnung was davon jetzt wirklich relevant für den Fehler ist und was nicht. Komischerweise hab ich seid ich ihn hier gepostet hab nicht wieder gesehen (vllt hat er ja jetzt Angst weil ich ihn ins Rampenlicht gestellt hab :D:D)

    Wenn ihr trotzdem noch ne Idee hättet dann nur raus damit 🙂

    thx

    meeee

    ps gibts in der boardsoftware ne möglichkeit diese Codes "ausklappbar" zu machen, also das man auf nen Button klickt und er dann erst erscheint, ich kenn das aus anderen Foren (zb Spoiler funktionen und so...)



  • Hallo,

    Fehler sehe ich direkt auch keine, aber trotzdem hier ein paar Bemerkungen
    1. Brauchst du wirklich diese ganzen Headerdateien

    #include <Math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    

    abgesehen davon, dass diese veraltet sind. C++ typisch würde man statt dessen

    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    

    verwenden. Dann darf man natürlich den namespace std nicht vergessen.

    2. Struc-Deklaration
    Die sieht bei C++ normalerweise anders aus. z.Bsp. statt

    typedef struct                                                                  //
    {
    char       Fld[Prg_MaxCar];
    Prg_IntTyp Anw[Prg_MaxCar];
    } Prg_StrTyp;
    

    lieber

    struct Prg_StrTyp                                                                  
    {
    char       Fld[Prg_MaxCar];
    Prg_IntTyp Anw[Prg_MaxCar];
    };
    

    3. Du hast noch sehr viel C-typischen Code in deinem Programm (char[], FILE etc). Das kannst du zwar machen, aber es wäre vielleicht günstig auf mehr C++-typische Features zu ändern (std::string, iostream etc.)

    Ciao



  • Hi,

    danke für die Hinweise, ich lerne C++ erst seit einer Woche, hab aber jemand der mir ab und an was zeigen kann und das war dann bisher immer dieser C Code 😃

    Werd mal versuche mich da ein bischen einzulesen um mehr C++ zu schreiben 🙂

    Danke!!

    bye

    meeee



  • Zum ursächlichen Problem:

    Mal auf vorcompilierte Dateien verzichten, mal alle *.obj, *.tds löschen. Auf inkrementelles Linken verzichten


Anmelden zum Antworten