Funktionsufruf schlägt fehl woran kann das liegen?



  • Hallo

    ich möchte stink einfach eine Funktion aufrufen die mir etwas erledigt und dann wieder zurückspringt.

    habe die funktion fearben in der haupt.h definiert und zwar so

    int faerben(int);
    

    so in der haupt.cpp in der die haupt.h includiert wurde will ich die Funktion so aufrufen

    faerben(intAnzZeichenAktuell);
    

    die Funktion sieht folgendermaßen aus

    int faerben(int intAnzZeichenAktuell2)
    {
      String STZeile;
      STZeile=rftAWL->Lines->Strings[x];
      rftAWL->SelStart=intAnzZeichenAktuell2; // Beim ersten zeichen anfangen
      rftAWL->SelLength = STZeile.Length(); // Länge diretk aus dem String bestimmen
      rftAWL->SelAttributes->Color=clRed;
      rftAWL->SelLength = 0; // Auswahl rückgängig machen
      rftAWL->SelStart = intAnzZeichenAktuell2+STZeile.Length()+1;
      rftAWL->SelAttributes->Color=clWindowText;
      return;
    }
    

    so und diese Fehlermeldungen bekomme ich vom Borland

    [C++ Fehler] Haupt.cpp(1703): E2141 Fehler in der Deklarationssyntax
    [C++ Fehler] Haupt.cpp(1732): E2139 In Deklaration fehlt ;
    [C++ Fehler] Haupt.cpp(1732): E2134 Abschließendes } fehlt

    Woran kann das liegen sehe ich den Wald vor lauter Bäumen nicht mehr oder mach ich effektiv was falsch.
    zur in formation ich hatte das ganze zuerst als void funktion definiert als

    void faerben(int);
    

    dies führte zu den selben Fehlermeldungen

    Vielen Dank schonmal für eure Hilfe

    Felix



  • Irgendwo in deinem Code fehlt ein '}', das kann durchaus schon in der Header-Datei sein.



  • ne eigentlich net weil ich eine Zeile vorher bereits eine Funktion deklariert habe die ohne Probleme läuft.



  • so hab mal ne zeile vorher im Code mitkopiert

    int open_com(void); //geht
    int send(unsigned char);//geht
    int close_com(void);//geht
    int faerben(int);//geht nicht
    


  • Hallo

    was passiert denn, wenn du die fragliche Zeile mit

    int faerben(int);
    

    komplett auskommentierst? Wenn Jansen mit seiner Vermutung recht hat (die ich übrigens teile) dann springt der Fehler einfach auf die nächste Zeile.

    bis bald
    akari



  • Mal ne Frage. Warum soll kein }-Zeichen fehlen können, wenn die Funktionen, die vor dieser Funktion deklariert sind funktionieren. Das ist doch logisch, dass die, die vor dem Fehler definiert wurden funktionieren.

    Ich verstehe die Logig nicht.

    MfG René



  • Die Logik dahinter für mich ist wenn ich kein '{' gemacht habe kann ja auch kein '}' fehlen. Weil vorher lief es ja

    00:26:38 29.11.2005 Titel: Zitieren

    Hallo

    was passiert denn, wenn du die fragliche Zeile mit
    C/C++ Code:
    int faerben(int);
    C/C++ Code:
    int faerben(int);
    C/C++ Code:
    int faerben(int);

    komplett auskommentierst?

    Wenn ich die Funktion auskomenntiere ist der Fehler weg.

    mfg Felix



  • Ich hab jetzt grad nochmal in der Hilfe gewälzt und für mich sieh esso aus als ob Borland aus der Funktion eine struct machen möchte.



  • in der Fehlermeldung stehen doch die Zeilen wo der Fehler auftritt.
    welche Zeilen sind denn das? eventuell spielt auch die Zeile darüber eine Rolle



  • wäre interessant zu wissen, welche zeilen im code das sind, die er anmeckert und nicht nur die fehlermeldungen!

    sieht eher so aus, dass ein header vergessen wurde, einzubinden. ausserdem wie ist rftAWL deklariert, als globale variable?



  • also die Fehler meldung 1

    [C++ Fehler] Haupt.cpp(1703): E2141 Fehler in der Deklarationssyntax

    bezieht sich auf

    int faerben(int intAnzZeichenAktuell2)
    {//<--diese Zeile
      String STZeile;
    

    die anderen beiden Fehler Meldungen,
    [C++ Fehler] Haupt.cpp(1732): E2139 In Deklaration fehlt ;
    [C++ Fehler] Haupt.cpp(1732): E2134 Abschließendes } fehlt

    sind ausserhalb des Codes d.h. am Ende des Editors



  • rftAWL ist eine Richtextbox und ist definiert



  • wie ist rftAWL deklariert, als globale variable? hast du system.hpp inkludiert fuer AnsiString?

    Ein Fehler ist nicht immer dort zu suchen, wo man ihn vermeintlich angezeigt bekommt!

    Zeig mal deinen Header und den obersten Teil der cpp



  • Also jetzt nochmal genauer

    die Schritte (die mit dem rftAWL) läufen ausserhalb der von mir selbst erzeugten Funktion ohne Probleme d.h. ich hab die schritte bereits vorher getestet und wollte sie nun um Modularer zu werden in einen Funktionsaufruf packen (zwecks übersicht) klappt aber offensichtlich net. Ich gehe daher, da es ausserhalb der Funktionen ohne Probleme funktioniert, davon aus, das es an der Funktionsdeklaration liegt, ich weiß nur net was da net stimmen soll!!!!!

    MfG Felix



  • Falls es doch einigen etwas bringt wer weiß das schon hier nochmal meine Ikludierten Files

    #include <vcl.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <windows.h>
    #include <winbase.h>
    #include <winuser.h>
    #include <dir.h>
    #include <string.h>
    #include <process.h>    /* _beginthread, _endthread */
    #include <windows.h>            //fuer serielle Kommunikation
    #include <iostream.h>           //fuer cout, cin 
    #include <conio.h>              //fuer Fkt. getch(), clrscr(); 
    #include <ctype.h>              //fuer toupper() 
    
    #pragma hdrstop
    
    #include "Haupt.h"
    #include "Info.h"
    #include "Compiler.h"
    #include "Discomp.h"
    #include "Senden.h"
    #include "Empfangen.h"
    #include "Optionen.h"
    
    #define Byteanzahl			3000
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    //#pragma link "ComDrv32"
    #pragma resource "*.dfm"
    TfrmHaupt *frmHaupt;
    #define COM_BUFFER_SIZE 16        // Read- und Write-Buffer-Size 
    HANDLE hCom;
    

    so das ist der obere Teill meiner .cpp-Datei

    und hier ist die Header Datei

    /*************************************************************************/
    /* Projekt:		Entwicklungsumgebung für SPS-System						 */
    /*																		 */
    /* Datei:       Haupt.h                                 				 */
    /*																		 */
    /* Aufgabe:     Headerfile fr SPS.C									 */
    /*																		 */
    /* Programmierer:  Timo Heitz und Andreas Bttner, TEL96AT   			 */
    /*																		 */
    /*-----------------------------------------------------------------------*/
    /* Funktionen:															 */
    /*																		 */
    /*																		 */
    /*-----------------------------------------------------------------------*/
    /* Hz	06.04.99														 */
    /*																		 */
    /*************************************************************************/
    #ifndef __Haupt_h
    #define __Haupt_h
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <ExtCtrls.hpp>
    #include <jpeg.hpp>
    #include <Graphics.hpp>
    #include <Menus.hpp>
    #include <Dialogs.hpp>
    #include <ComDrv32.hpp>
    #include <Printers.hpp>
    
    /*-----------------------------------------------------------------------*/
    /*	allgemeine Definitionen												 */
    /*-----------------------------------------------------------------------*/
    #define Anfangs_Kennung		0xFA
    #define Ende_Kennung		0xFE
    
    #define Byteanzahl			3000
    #define Sicherheit          500
    #define StackSize           8192
    
    /*-----------------------------------------------------------------------*/
    /*	Klassen											 */
    /*-----------------------------------------------------------------------*/
    class TfrmHaupt : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            TPageControl *TPage;
            TTabSheet *regHauptmenue;
            TButton *btnCompile;
            TButton *btnSenden;
            TButton *btnEmpfangen;
            TButton *btnOptionen;
            TButton *btnHilfe;
            TButton *btnEnde;
            TTabSheet *regAnweisungsliste;
            TTabSheet *regListdatei;
            TTabSheet *regBinaerdatei;
            TImage *Image1;
            TEdit *Edit4;
            TEdit *Edit3;
            TPanel *Panel1;
            TPanel *Panel2;
            TMainMenu *mnuHauptMenue;
            TMenuItem *mnuDatei;
            TMenuItem *mnuDateiNeu;
            TMenuItem *mnuDateiOeffnen;
            TMenuItem *mnuDateiSpeichern;
            TMenuItem *mnuN1;
            TMenuItem *mnuDateiDrucken;
            TMenuItem *mnuN2;
            TMenuItem *mnuDateiBeenden;
            TMenuItem *mnuBearbeiten;
            TMenuItem *mnuBearbeitenAusschneiden;
            TMenuItem *mnuBearbeitenKopieren;
            TMenuItem *mnuBearbeitenEinfgen;
            TMenuItem *mnuBearbeitenLoeschen;
            TMenuItem *mnuN3;
            TMenuItem *mnuBearbeitenFinden;
            TMenuItem *mnuBearbeitenErsetzen;
            TMenuItem *mnuHilfe;
            TMenuItem *mnuHilfeInhalt;
            TMenuItem *mnuN5;
            TMenuItem *mnuHilfeUeber;
            TRichEdit *rftAWL;
            TOpenDialog *odgOpen;
            TSaveDialog *sdgSave;
            TPrintDialog *pdgPrint;
            TFindDialog *fdgFind;
            TReplaceDialog *rdgReplace;
            TRichEdit *rftListdatei;
            TRichEdit *rftBinaer;
        TImage *Image2;
            void __fastcall btnHilfeClick(TObject *Sender);
            void __fastcall btnEndeClick(TObject *Sender);
            void __fastcall Info1Click(TObject *Sender);
            void __fastcall TPageChange(TObject *Sender);
            void __fastcall mnuFileExitClick(TObject *Sender);
            void __fastcall mnuHilfeUeberClick(TObject *Sender);
            void __fastcall mnuDateiBeendenClick(TObject *Sender);
            void __fastcall mnuDateiNeuClick(TObject *Sender);
            void __fastcall mnuDateiOeffnenClick(TObject *Sender);
            void __fastcall mnuDateiSpeichernClick(TObject *Sender);
            void __fastcall mnuDateiDruckenClick(TObject *Sender);
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall mnuHilfeInhaltClick(TObject *Sender);
            void __fastcall mnuBearbeitenAusschneidenClick(TObject *Sender);
            void __fastcall mnuBearbeitenKopierenClick(TObject *Sender);
            void __fastcall mnuBearbeitenEinfgenClick(TObject *Sender);
            void __fastcall mnuBearbeitenLoeschenClick(TObject *Sender);
            void __fastcall mnuBearbeitenFindenClick(TObject *Sender);
            void __fastcall mnuBearbeitenErsetzenClick(TObject *Sender);
    
    	void __fastcall fdgFindFind(TObject *Sender);
    	void __fastcall rdgReplaceFind(TObject *Sender);
           	void __fastcall rdgReplaceReplace(TObject *Sender);
            void __fastcall btnCompileClick(TObject *Sender);
            void __fastcall btnSendenClick(TObject *Sender);
            void __fastcall btnEmpfangenClick(TObject *Sender);
        void __fastcall btnOptionenClick(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall CommPortDriverReceiveData(TObject *Sender,
              Pointer DataPtr, int DataSize);
       // void __fastcall btnFUPClick(TObject *Sender);
        void __fastcall Image2Click(TObject *Sender);
        void __fastcall rftAWLKeyPress(TObject *Sender, char &Key);
    
    private:	// Anwenderdeklarationen
    	AnsiString sTitel;
        AnsiString sFileName;
    
        void __fastcall SaveFileName(AnsiString FileName);
        void __fastcall CheckFileSave(TObject *Sender);
        void __fastcall PrintFooter(TRect& rect, int nLineHeight);
        void __fastcall Beenden(TObject *Sender);
    
    public:		// Anwenderdeklarationen
            __fastcall TfrmHaupt(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TfrmHaupt *frmHaupt;
    //---------------------------------------------------------------------------
    
    #ifndef __Haupt_h__
    #define __Haupt_h__
    
    /*-----------------------------------------------------------------------*/
    /*	projektglobale Variablen										 	 */
    /*-----------------------------------------------------------------------*/
    unsigned char	Schnittstelle;
    bool            NOP_Anzeige;
    
    char    Pfad_Sps_awl[MAXPATH] ,Pfad_Sps_lst[MAXPATH] ,Pfad_Sps_bin[MAXPATH];
    char    Pfad_SPS_Bin_txt[MAXPATH], Fup_exe[MAXPATH];
    char    Pfad_SPSCompErg[MAXPATH], SPS_ini[MAXPATH];
    HANDLE  COM_Port, h_PROGRESS, h_SENDEN, h_EIGENSCHAFTEN, h_EMPFANGEN;
    bool    Comp_Erg=false;
    bool    discompilieren=false;
    WORD    w_PROGRESS;
    char    StartVerzeichnis[MAXPATH];
    long    LetzterStart=0;
    
    /*-----------------------------------------------------------------------*/
    /*	lokale Funktionsprototypen fr SPS.C								 */
    /*-----------------------------------------------------------------------*/
    //int Menue();
    //void Editieren();
    //void Anzeigen_LST();
    //void Anzeigen_BIN();
    //void Optionen();
    //void Hilfe();
    char *aktuellerPfad(char *path);
    void threadSenden(void *threadno);
    void threadSendenProgress(void *threadno);
    void threadEmpfangenFenster(void *threadno);
    bool Schnittstellenergebnis(void);
    int open_com(void);
    int send(unsigned char);
    int close_com(void);
    int faerben(int);
    
    /*-----------------------------------------------------------------------*/
    /*	externe Funktionsprototypen 										 */
    /*-----------------------------------------------------------------------*/
    extern  void Init_Seriell(void);
    //extern  void Schreib_Bin(FILE *f,char b);
    extern  void Senden(void);
    extern  int Holen(void);
    extern  void Discompiler(void);
    extern  void Compiler(void);
    
    /*-----------------------------------------------------------------------*/
    /*	lokale Funktionen und Modulglobale Variablen						 */
    /*-----------------------------------------------------------------------*/
    
    unsigned char acDATEN[Byteanzahl+Sicherheit];
    bool    b_ABBRUCH=false;            //wenn false, dann nicht abbrechen
    bool    bSTARTPROGRESS=false;
    
    /*-----------------------------------------------------------------------*/
    #endif	/* __Haupt_h__ */
    #endif	/* __Haupt_h */
    /*************************************************************************/
    

    Brauche dringend hilfe hab noch 30 min bis mein Dozent was sehen will 😮



  • Setz doch deine globalen Variablen als "extern" in den Header (plus einer "richtigen" Definition im CPP-File) und nimm alles aus dem Header heraus, was man "außen" nicht sehen soll (modulglobale Variablen und lokale Funktionen).



  • wie du jetzt selber siehst, ist faerben keine member deiner klasse TfrmHaupt, allerdings versuchst du auf ein element dieser klasse von aussen zu zugreifen ohne die klasse selbst anzusprechen.



  • Hallo Sunday also du scheinst da problem jetzt wohl richtig gedeutet z haben mitlerweile erkennt er die Funktion als Funktion, nur kennt er die Richttextbox nicht mehr wie muß ich die den Deklarieren, bzw wie kann ich weiter auf die Eigenschaften von der Richtextbox zugreifen.

    MfG Felix



  • Du brauchst ein Objekt vom Typ TfrmHaupt, dann kannst du dessen Member-Variablen verändern. Woher du das bekommst, hängt von deinem Design ab (globale Variable oder Zugriffsfunktion bieten sich an).



  • also an alle Helfer ein Dankeschön

    folgendes war das Problem.

    Ich hatte tatsächlich 10 Zeilen oberhalb eine } beim auskommentieren mit ausgeklammert. daher hat der Compiler versucht us der Funktion eine Struktur zubauen wobei er kläglich gescheitert ist.

    Also mein Fehler


Anmelden zum Antworten