Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Welche Methode wird da in C++ aufgerufen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.02.2005
    Beiträge
    74

    Welche Methode wird da in C++ aufgerufen?

    Hi,

    ich habe eine Klasse:
    bla::add(string, int);
    bla::add(string, string);

    Jetzt rufe ich die Methode add mit den Parametern ("Test", NULL) auf, welche Methode wird da aufgerufen oder welche Methode muss ich da noch anlegen, das eine aufgerufen wird?

    Danke für Eure Antworten.
    Gruss
    Matthias

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    Ich würde behaupten, dass keine von beiden aufgerufen wird - da keine besser ist, als die andere. Beide haben einen übereinstimmenden Parameter und die Konvertierungen von NULL nach int oder nach String scheinen beide meiner Meinung nach möglich zu sein und vom Compiler her implementiert...

    Kann mich aber natürlich auch täuschen...

    Neue Methode, die dann aufgerufen wird? Geht so glaub ich nicht... Würde einfach das NULL durch etwas anderes ersetzen - also entweder 0 oder "NULL" und dann entsprechend in den Funktionen behandeln...

    Oder halt eine Funktion mit nur einem Parameter...

    MfG Bischi

    PS: Wieso werd ich das Gefühl nicht los, dass dies irgend so eine Uni-Aufgabe ist...

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.04.2002
    Beiträge
    185
    Hallo,
    probiers doch einfach aus...

    Also bei mir wird die string, int Funktion aufgerufen, wobei ich beim übersetzen die Wahrnung " warning: passing NULL to non-pointer argument 2 of 'void add(std::string, int)' bekomme.
    Wenn ich das Programm dazu zwinge die string, string Funktion zu nehmen (string, int auskommentieren) wird das Programm ohne Fehler/Warnung übersetzt aber beim Ausführen passiert das:

    terminate called after throwing an instance of 'std::logic_error'
    what(): basic_string::_S_construct NULL not valid
    Aborted

    Das ist aber nur ein experimentelles Ergebnis, wenn du das "offizielle" Verhalten wissen willst, mußt du wohl einen Blick in die Sprachspezifikation von C++ werfen.

    For a world where freedom and knowledge survives the compiler! (https://www.fsfe.org)

    If art interprets our dreams, the computer executes them in the guise of programs!

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.02.2005
    Beiträge
    74
    mein Aufruf sieht leider so aus:
    add("bla", methode2(foo));

    Wenn die Methode methode2 jetzt ein NULL zurückgibt, habe ich genau das Problem was ich jetzt habe.

    Klar kann ich jetzt da wieder eine if Abfrage rumschreiben, aber ich fände es am saubersten, wenn das abhandeln von solchen Speziallfälle in die entsprechende Klasse rein kommt.

    Ich habe geschaut, was für eine Methode aufgrufen wird und es ist keine.
    Ich bekomme die Fehlermeldung wie BeS es geschrieben hat.

    Weiss keiner, wie ich die Funktion definieren müsste, damit dieser Spezialfall abgefangen wird?
    Gruss
    Matthias

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    mein Aufruf sieht leider so aus:
    add("bla", methode2(foo));

    Wenn die Methode methode2 jetzt ein NULL zurückgibt, habe ich genau das Problem was ich jetzt habe.

    Klar kann ich jetzt da wieder eine if Abfrage rumschreiben, aber ich fände es am saubersten, wenn das abhandeln von solchen Speziallfälle in die entsprechende Klasse rein kommt.

    Ich habe geschaut, was für eine Methode aufgrufen wird und es ist keine.
    Ich bekomme die Fehlermeldung wie BeS es geschrieben hat.

    Weiss keiner, wie ich die Funktion definieren müsste, damit dieser Spezialfall abgefangen wird?
    Ich glaube du vermischst zwei verschiedene Konzepte, nämlich erstens Overload-Resolution und zweitens das Verhalten zur Laufzeit, wenn die durch Overload-Resolution ausgewählte Funktion ausgeführt werden soll.

    Ich fürchte, du wirst nicht umhin kommen, den Spezialfall "0" gesondert zu behandeln. Der gewählte Konstruktor von std::string erwartet einen nicht-null Zeiger. Kannst du denn die Definition von methode2 ändern? Wenn ja kannst du vielleicht "" (Also einen Zeiger auf einen leeren C-String) zurückgeben, anstatt einem Nullzeiger.

  6. #6
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von idefix
    mein Aufruf sieht leider so aus:
    add("bla", methode2(foo));

    Wenn die Methode methode2 jetzt ein NULL zurückgibt, habe ich genau das Problem was ich jetzt habe.
    Ich würde das auch so sehen wie locus vivendi: Lass methode2 keinen Zeiger sondern einen String zurückgeben - denn den erwartet add() ja eigentlich auch...

    Alternativ könntest du die add()-Funktion so umändern, dass sie statt einem String einen Zeiger erwartet, aber das war wohl nicht Sinn der Sache, oder?

  7. #7
    Registrierter Benutzer
    Registriert seit
    02.02.2005
    Beiträge
    74
    Zitat Zitat von locus vivendi
    Wenn ja kannst du vielleicht "" (Also einen Zeiger auf einen leeren C-String) zurückgeben, anstatt einem Nullzeiger.
    Jepp, damit klappt es, danke Euch allen für die prompte Hilfe!
    Gruss
    Matthias

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •