Mehrdeutiger Aufruf einer überladenen Funktion
-
Hallo,
ich möchte konstante Zeichenketten a la "abc" und die Inhalte der Referenzen auf Strings per cout ausgeben:void chk(string s) { cout << "no ref" << endl; cout << s << endl; } void chk(string& s) { cout << "ref" << endl; cout << s << endl; } string s("aha"); chk(s); // Mehrdeutiger Aufruf einer überladenen Funktion chk("soso");Ich bekomme eine Fehlermeldung:
Mehrdeutiger Aufruf einer überladenen Funktion.
Wie mache ich das am besten?
-
Hi!
Machst du ausvoid chk(string &s)nen
void chk(char* s)
-
P.S.
Ob das aber am besten ist, frag lieber die Experten.

-
Wieso brauchst du zwei gleichnamige Funktionen, von denen eine eine Referenz nimmt und die andere nicht?
Wenn es dir darum geht, Stringliterale zu übergeben, mach es wie solv0r - allerdings mit
const char*stattchar*, was sicherer ist.
-
Nexus schrieb:
Wieso brauchst du zwei gleichnamige Funktionen, von denen eine eine Referenz nimmt und die andere nicht?
Ich habe zum einen Stringliterale in Strings gespeichert. ( string str("abc") );
Und andererseits möchte ich print("abc") ausgeben können.
Wenn ich Referenzen übergeben kann, müssen die Inhalte nicht unnötiger weise umkopiert werden.
-
Dazu brauchst du trotzdem keine Funktion die das Argument kopiert. Übergabe per (const) Referenz reicht aus.
-
void chk(const std::string& str); std::string s("Wunderbar"); chk(s); chk("Noch mehr wunderbar");funktioniert doch beides!
Beim zweiten Aufruf wird halt einfach ein temporäres std::string-Objekt erzeugt.
-
const string&

Das ist es!
Ihr seid super, vielen Dank!