string- default argument
-
Warum geht das nicht:
#include <iostream> #include <string> using namespace std; class game { public: inline int get_controller() const {return m_controller;} void story_part(string question, string a, string b, string c, string effect1, string effect2=0, string effect3=0); private: int m_controller; }; void game::story_part(string question, string a, string b, string c, string effect1, string effect2=0, string effect3=0) { } int main() { return 0; }???
MELDUNG:
-------------- Build: Debug in GAME ---------------
Compiling: main.cpp
main.cpp:22: error: default argument given for parameter 6 ofvoid game::story_part(std::string, std::string, std::string, std::string, std::string, std::string, std::string)' main.cpp:11: error: after previous specification invoid game::story_part(std::string, std::string, std::string, std::string, std::string, std::string, std::string)'
main.cpp:22: error: default argument given for parameter 7 ofvoid game::story_part(std::string, std::string, std::string, std::string, std::string, std::string, std::string)' main.cpp:11: error: after previous specification invoid game::story_part(std::string, std::string, std::string, std::string, std::string, std::string, std::string)'
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 0 warningsMfG
Stromberg
-
Naja, schonmal das versucht:
Stromberg schrieb:
... string effect2=0; ...Klappt auch nicht, oder ?
Anders ausgedrückt: Welche string-Konstruktor soll für effect2 denn aufgerufen werden ?

Gruß,
Simon2.
-
Mh, Konstruktor? Ich will des halt so machen, das wenn man für "effect2" und "effect3" nix einträgt, das dann halt in "effet2" und "effect3" 0 drin steht.
Weiß jemand was ich mein?MfG
Stromberg
-
Stromberg schrieb:
Mh, Konstruktor? Ich will des halt so machen, das wenn man für "effect2" und "effect3" nix einträgt, das dann halt in "effet2" und "effect3" 0 drin steht.
Weiß jemand was ich mein?std::string repräsentiert Zeichenketten, keine Zahlen. 0 ist eine Zahl. Schlussfolgerung: 0 kann nicht in einem std::string drin stehen.
-
versuchs einfach mit effect3 = "0", dafür sollte es nen konstruktor geben.
-
Stromberg schrieb:
Mh, Konstruktor? Ich will des halt so machen, das wenn man für "effect2" und "effect3" nix einträgt, das dann halt in "effet2" und "effect3" 0 drin steht....
Eben: Und wie macht man dass, das in einem Objekt bei der Erzeugung "etwas drinsteht": Mit dem Konstruktor !
So auch hier.
Übrigens: Soll da wirklich der Buchstabe '0' drinstehen ? Oder möchtest Du nicht viel lieber einen "leeren String" (Also ein "" ) ?DrPhil_Guth schrieb:
versuchs einfach mit effect3 = "0", dafür sollte es nen konstruktor geben.
Ich vermute halt, dass Du mit
..., effect3 = "", ...das bekommst, was Du willst.
Es spielt dabei keinen Rolle, ob Du innerhalb einer Parameterliste oder "einfach so" beim Erzeugen eines Objekts einen Initialwert vorgibst: Es muss einen passenden Konstruktor geben.Gruß,
Simon2.
-
Weiterer Fehler:
Bei der Definition der Methode dürfen keine Default-Argument mehr angegeben werden, nur bei der Deklaration!
also:
class X { void y(int x = 0); };und
void X::y(int x) { }
-
Merker² schrieb:
Bei der Definition der Methode dürfen keine Default-Argument mehr angegeben werden, nur bei der Deklaration!
Du darfst schon - nur nicht die selben:
class X { void y(int a,int b=0); }; void X::y(int a=4711,int b)//übernimmt den Default-Parameter b=0 von der Deklaration { ... }(btw, die Default-Parameter 'string effect3 = 0' sind witzigerweise legal (0 kann in jeden Zeigertyp umgewandelt werden, auch char*), aber wie gut std::string mit einem NULL-Pointer umgehen kann, ist die andere Frage)
-
CStoll schrieb:
Du darfst schon - nur nicht die selben:
Heisst das, die Angabe identischer Defaults an beiden Stellen führt zum Fehler, die Angabe unterschiedlicher Defaults aber nicht?!
Fände ich doch schon suspekt

Der GCC meldet übrigens in beiden Fällen einen Fehler.
EDIT:
Falsch verstanden - nicht unterschiedliche Defaults für den selben Parameter, sondern für unterschiedliche Parameter. Finde ich aber trotzdem merkwürdig, heisst das etwa, dass man in der ÜE nach der Definition von X::y diese mit keinem Parameter aufrufen dürfte, in allen anderen ÜE, wo nur die Deklaration vorhanden ist jedoch nicht?
-
LordJaxom schrieb:
EDIT:
Falsch verstanden - nicht unterschiedliche Defaults für den selben Parameter, sondern für unterschiedliche Parameter. Finde ich aber trotzdem merkwürdig, heisst das etwa, dass man in der ÜE nach der Definition von X::y diese mit keinem Parameter aufrufen dürfte, in allen anderen ÜE, wo nur die Deklaration vorhanden ist jedoch nicht?Ja, das heißt es - praktisch genutzt habe ich das allerdings noch nicht.
-
CStoll schrieb:
wie gut std::string mit einem NULL-Pointer umgehen kann, ist die andere Frag
Ausdrücklich undefiniert.