Funktionen mit vordefinierten Standardwerten, bei Nichtbefüllung



  • Hallo,

    ich habe ein Problem mit selbstdefinierten Funktionen.
    mein Code sieht ungefähr so aus:

    im *.cpp
    machdas( bla, blubb, sowieso)

    im *.h
    machdas( int bla, int blubb, int sowieso = 1)

    ich im Aufruf sollte das nun so sein, dass wenn ich sowieso nicht übergebe, weil es keinen Wert hat, soll es einen Standartwert bekommen (in dem Fall 1)

    Muss ihc den Standartwert anders definieren? Weil er das Problem hat, dass selbst, wenn ich einen Wert übergebe, er immer auf 1 gesetzt wird.

    Gruß, Tupamann



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Geht das auch etwas verständlicher?

    void machwas(int wert, int param=0)
    {
      cout<<wert<<":"<<param<<endl;
    }
    
    int main()
    {
      machwas(4711);// gibt '4711:0' aus
      machwas(8,15);// gibt '8:15' aus
    }
    

    Wenn du beim Funktionsaufruf einen Wert für den optionalen Parameter bereitstellst, arbeitet die Funktion mit dem übergebenen Wert. Wenn du den Parameter wegläßt, wird stattdessen der vordefinierte Defaultwert verwendet.



  • Hmmm ich schreib mal genau hin, was ich als Fkt und Aufruf habe und was rauskommt:

    Da ich für anzrot in einigen Fällen keinen Wert habe, wollte ich standardmäßig 1 übergeben.
    anzrot wird in einer vorigen Funktion hochgezählt, aber der Kommentar soll nur eingefügt werden, wenn anzrot = 1. Wird aber nun ein anderer Wert übergeben, wird er wieder auf 1 zurückgesetzt und das verwundert mich etwas...muss ich den Standardwert von anzrot woanders setzen oder ist es in der Headerdatei richtig?
    Wenn richtig, warum übernimmt er immer den Wert 1??

    in der Headerdatei:

    void SetTextColor(CString zelle,CString Xls,CString TGF,CString SICASParam,BOOL bOk,int posZeile=-1,int posPos=-1, int anzrot=1);

    der Aufruf:

    m_ExcelFile.SetTextColor(FahrwegElementListeXls[i].ZelleprojFwLage,WeicheMitLage,strTGFLage,elem.strSICASParameter,false, anzrot);

    die Funktion:

    void CExcelFile::SetTextColor(CString zelle,CString Xls,CString TGF,CString SICASParam,BOOL bOk,int posZeile,int posPos, int anzrot)
    {

    CString Zelle,tmp,tmpZelle;
    Zelle = LeseZelle(zelle,zelle);
    int outStrPos=0,outLinePos=0;
    int start=0,end=0;
    int iDoppelpunkt = 0;

    iDoppelpunkt = Xls.Find(":",0)+1;

    if(posZeile != -1 && posPos != -1)
    {
    tmpZelle = GibEintragAnPos(Zelle, posZeile,",",outLinePos);
    tmp = GibEintragAnPos(tmpZelle, posPos,":",outStrPos);
    }

    start = Zelle.Find(Xls,outLinePos+outStrPos)+1;
    end = Xls.GetLength();
    if(iDoppelpunkt)
    {
    start = start + iDoppelpunkt;
    end = end - iDoppelpunkt;
    }

    if(!end)
    return;

    characters = range.GetCharacters(COleVariant((long)start), COleVariant((long)end));
    font = characters.GetFont();

    if(bOk)
    font.SetColor(COleVariant((long)RGB(0,255,0)));
    else
    {
    if (anzrot == 1)
    Kommentar(zelle, SICASParam, TGF);

    font.SetColor(COleVariant((long)RGB(255,0,0)));
    }
    }



  • Erstens: CPP-Tags sind durchaus etwas nützliches 😉

    Zweitens: Du hast ein paar mehr optionale Paramter als nur 'anzrot' - und die werden immer von links nach rechts den übergebenen Argumenten zugeordnet:

    void SetTextColor(
      CString zelle,
      CString Xls,
      CString TGF,
      CString SICASParam,
      BOOL bOk,
      int posZeile=-1,
      int posPos=-1,
      int anzrot=1);
    
    m_ExcelFile.SetTextColor(
      FahrwegElementListeXls[i].ZelleprojFwLage, //zelle
      WeicheMitLage,                             //Xls
      strTGFLage,                                //TGF
      elem.strSICASParameter,                    //SICASParam
      false,                                     //bOk
      anzrot);                                   //posZeile
                                                 //posSpalte = -1 (Default)
                                                 //anzrot = 1 (Default)
    

    -> wenn du einen Wert für anzrot angeben willst, mußt du auch für die davorstehenden Parameter (posZeile und posSpalte) Werte angeben.



  • *vor den Kopf hau*
    Klar...jetzt fällt es mir wie Schuppen aus den Haaren 😃

    Vielen Dank..

    *Kopf schüttel* sowas offensichtliches ...


Anmelden zum Antworten