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. statttypedef 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