Argumente uebergeben in C++

  • Hallo, ich habe ein Problem mit einem Methodenaufruf und komme nicht weiter. Wenn ich mit meiner add() Methode Elemente uebergebe, die ich dann in ein Array einfuege, moechte ich vor dem adden ueberpruefen, ob tatsaechlich in der Methode ein Element als Argument uebergeben wurde.

    add(const E &e) {add(&e, 1);}
    add( const E e[], size_t len ) {}

    Fuer die Anwendung muss sichergestellt sein, dass auch tatsaechlich ein Element uebergeben wird.
    add() sollte im Programm abgefangen werden, um undefiniertes Verhalten zu verhindern. Wie soll ich das implementieren, bin fuer jeden Hinweis dankbar.

  • Die Deklaration

    Code
    add( const E e[], size_t len )

    bedeutet nichts anderes als

    Code
    add( const E *e, size_t len )

    , weil aus dummen historischen Gründen ist das in Parameterdeklarationen nunmal so. Du hast also einen Pointer e, und mit dem kannst du zum Beispiel Vergleiche gegen NULL anstellen.

    *plantsch*

  • Danke fuer die Antwort. Aber das Problem ist die erste add-Methode

    add(const E &e) {add(&e, 1){add( &e, 1 );}

    e ist eine Referenz und kein Pointer und kann daher auch nicht einfach auf 0 ueberprueft werden (die Zahl 0 kann vom Anwender als reeller Wert eingegeben werden).

    Meine Frage bezieht sich auf die zweite add-Methode
    add(const E e[], size_t len);
    Was passiert mit len wenn das erste add ohne Argument aufgerufen wird, und was passiert mit e[], und vor allem wie kann ich das ueberpruefen? Das scheint wohl alles ziemlich basic zu sein, aber irgendwie stehe ich auf der Leitung.

  • Du kannst einen Referenzparameter theoretisch nicht ohne eine Referenz auf ein gültiges Objekt aufrufen. Das ist der Unterschied zwischen Referenzen und Pointern: Ein Pointer könnte ungültig sein, aber die Idee von Referenzen ist, daß sie nie ungültig sind. Man kann natürlich trotzdem Schabernack treiben, aber... was ist die wirkliche Frage? Ist das eine Hausübung? Was ist die ganz genaue Problemstellung?

    *plantsch*

  • Ich glaube du hast meine Frage schon beantwortet. Ich habe mich da in etwas verbissen das nicht viel Sinn macht.
    Ich bin dabei ein Programm für eine Hashtabelle zu schreiben, in die der user auf zwei Arten die Werte eingeben kann - deswegen die zwei add-Methoden. Bei der ersten Methode wird der Wert einzeln übergeben, bei der zweiten im Array. Implementiert habe ich es so, dass auch wenn ein einzelner Wert eingegeben wird, die Array-Methode aufgerufen wird. Ich bekomme leider nach wie vor einen Seg fault. meine Befürchtung war dass ein fehlendes Argument in meinem Programm zu einem undefinierten Verhalten führt, aber dein Hinweis auf den Referenzparameter hat diese Bedenken zerstreut. Ich denke dass mein Fehler an einer anderen Stelle im Programm sitzt. Danke für deine Hilfe. Alfred

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!