1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Argumente uebergeben in C++

  • funztned
  • 23. Mai 2013 um 19:54
  • Unerledigt
  • funztned
    2
    funztned
    Mitglied
    Punkte
    30
    Beiträge
    4
    • 23. Mai 2013 um 19:54
    • #1

    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.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 24. Mai 2013 um 07:47
    • #2

    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*

  • funztned
    2
    funztned
    Mitglied
    Punkte
    30
    Beiträge
    4
    • 24. Mai 2013 um 19:12
    • #3

    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.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 25. Mai 2013 um 13:11
    • #4

    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*

  • funztned
    2
    funztned
    Mitglied
    Punkte
    30
    Beiträge
    4
    • 25. Mai 2013 um 16:18
    • #5

    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

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung