Standardargumente



  • Habe gerade in meinem C++ Buch gelernt, dass es ne Möglichkeit gibt Standardargumente in C++ festzulegen.
    Für Funktionen.
    Somit werden diese falls der Benutzer sie nicht beim Funktionsaufruf übergibt standardmäßig den Werten zugewiesen.
    Folgendes Beispiel funktioniert nach Buch.
    Doch leider nicht nach meinem Compiler:

    #include<iostream> 
    using namespace std; 
    void hallo(int,int,int);
    
    int main() 
    { 
      hallo();   //Sollte eigentlich nicht nötig sein Argumente zu übergeben, da die Funktion über Standardargumente verfügt.
      getchar();
      return(0); 
    }
    void hallo(int a=3,int b=4,int c=3)
    {
        cout << a << b << c << endl;
    }
    

    Wiedersehn

    David

    Errors:

    3 C:\Dokumente und Einstellungen\Praktikant\Eigene Dateien\test.cpp too few arguments to function `void hallo(int, int, int)'

    7 C:\Dokumente und Einstellungen\Praktikant\Eigene Dateien\test.cpp at this point in file

    ~PS: Für die PS3 ist immer noch kein Geld da. Daher muss ich leider weiter proggen^^~



  • Die Reihenfolge ist falsch: Wenn es eine Deklaration gibt, die nicht Definition ist, müssen die Standardargumente dort angegeben werden, und bei der Definition nicht.

    #include<iostream>
    using namespace std;
    void hallo(int a=3, int b=4, int c=3);
    
    int main()
    {
      hallo();   //Sollte eigentlich nicht nötig sein Argumente zu übergeben, da die Funktion über Standardargumente verfügt.
      getchar();
      return(0);
    }
    void hallo(int a, int b, int c)
    {
        cout << a << b << c << endl;
    }
    

    PS: Gewöhn Dir an, die Parameternamen auch bei Deklarationen auszuschreiben, das gehört zur Dokumentation von Schnittstellen. Sofern die Bezeichner aussagekräftig sind, natürlich. 😉



  • Der Compiler arbeitet von oben nach unten - und beim Aufruf kennt er nur den Prototyp der Funktion (der hat aber keine Default-Parameter). Damit das Beispiel funktionieren kann, mußt du die Default's an der richtigen Stelle angeben:

    #include<iostream> 
    using namespace std; 
    void hallo(int=3,int=4,int=3);//hier gehören die Defaultwerte hin
    
    int main() 
    { 
      hallo();
      getchar();
      return(0); 
    }
    void hallo(int a,int b,int c)//hier nicht
    {
        cout << a << b << c << endl;
    }
    


  • Zum Zeitpunkt von Main ist nur hallo(int, int, int) bekannt. Daher werden 3 Variablen erwartet.

    Die Methode hallo(int = ...) folgt erst nach main



  • 777 schrieb:

    Habe gerade in meinem C++ Buch gelernt, dass es ne Möglichkeit gibt Standardargumente in C++ festzulegen.

    Ich hatte sowas auch, nun übersetzte ich mein Code als C und es ging nicht. Guck mal bitte, welche Optionen du deinem Compiler übergeben kannst.



  • LordJaxom hatte Recht.
    Ich hatte es genau vertauscht 😉

    Noch ne Frage:

    Nehmen wir an ich möchte das zweite Objekt festlegen, das erste jedoch Standartmäßig festlegen- wie geht das.

    Folgender Code ergibt einen Fehler:

    hallo(,,7);
    

    cya

    David



  • Das geht in C++ gar nicht - du darfst nur die hintersten Argumente weglassen (und durch Defaultwerte auffüllen).



  • Du musst Standardargumente AFAIK immer zum Schluß der Argumentenliste setzen.



  • Danke
    Irgendwo klingt das auch logisch 😉


Anmelden zum Antworten