Aufruf von FUnktionen die erst noch deklariert werden



  • Hi wahrscheinlich gehört das hier nicht hin,
    ich hoffe aber mir kann trotzdem geholfen werden.
    Mein Problem ist folgendes die Funktionen rufen sich gegenseitig auf
    aber es kann nicht jede vor der anderen definiert werden.
    z.B. Wenn M() oben steht kommt der Fehler V() nicht bekannt.
    Was kann ich tun???

    void M(){
       switch(asym){
          case mid:   getsym();break;
          case zero:  getsym();break;
          case slparen:
             do{
                getsym();
                if (asym != eid) error ("Element Identifier erwartet!");
                if (asym == eid) getsym();if (asym != komma || asym != srparen);error ("Komma erwartet!");
    
             }while (asym != srparen);
          case lparen:{
             getsym();V();
             if (asym == rparen) getsym(); else error(") erwartet!");
             break;
          }
          default: error ("kein gültiger Anfang für Primärausdruck");
    
       }
    }
    
    void D(){
       M();
       while (asym == und){getsym();M();}
    }
    
    void V(){
       D();
       while (asym == ohne || asym == oder){getsym(); D();}
    }
    
    void P(){
       do{
          if (asym == mid) getsym();    else error ("Mengen Identifier erwartet!");
          if (asym == equals) getsym(); else error ("= erwartet!");
          V();
          if (asym == semikolon) getsym(); else error ("; erwartet");
       }while(asym == mid);
    }
    

    <edit>Bitte Code-Tags benutzen!</edit>

    [ Dieser Beitrag wurde am 12.11.2002 um 15:54 Uhr von junix editiert. ]



  • Original erstellt von alexo77:
    [QB]Hi wahrscheinlich gehört das hier nicht hin, ich hoffe aber mir kann trotzdem geholfen werden.QB]

    Richtig, die Frage ist hier fehl am platz, da es sich um eine Standard C-Frage handelt. Dahin verschieb ich dich auch gleich. (Frage mich wieso du nicht selber direkt ins C-Forum gegangen bist?)

    Zu dienem Problem: Mal abgesehen davon, dass weder "D" noch "M" noch andere einzelne Buchstaben des Alphabets Aussagekräftige Funktionsnamen darstellen, und der Quelltext dazu nichtmal kommentiert ist und auch die Variablennamen nicht allzu vielsagend sind, empfehle ich dir, ein grundlegedes C-Tutorial durchzuarbeiten.

    Die Lösung zu deinem Problem ist eine Headerdatei in der du die Funktionen bekannt machst. (Kannst du auch direkt nach den includes im cpp-file machen, ist aber unsauberer)

    Bekanntmachen heisst, du schriebst den Funktionsprototypen hin. Also zum Beispiel: [cpp]void M(void);[/cpp]
    (Da fällt mir auf, dass du kein void eingetragen hast, es wird als guter stil angesehen, wenn man anstelle von leeren klammern einfach "void" rein schreibt. Wieder zu kommentarzwecken)

    Ausserdem würde ich mir gut überlegen, ob es wirklich nötig ist, dass die Funktion M über D zum Beispiel aufgerufen werden muss oder ob nicht einfach dein Design etwas verkorkst ist.

    So, nun schieb ich dich aber mal weiter nach "C".

    -junix

    [ Dieser Beitrag wurde am 12.11.2002 um 16:05 Uhr von junix editiert. ]


Anmelden zum Antworten