PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Argument



Giuly
23-12-2003, 16:00
Hi,
ich hab ein problem.
ich will für ein argument einen defaultwert setzten.
ich hab da jetzt
f(const string& eins, const string& zwei ="drei")
das geht aber nicht.
im stroustrup stehts so.
Wie geht das richtig?

tuxipuxi
23-12-2003, 16:14
hi,

das ist schon richtig so... was bedeutet denn "geht nicht"? du kannst es nicht kompilieren? du kannst die funktion nicht richtig aufrufen?

gruss,
tuxipuxi.

panzi
23-12-2003, 16:55
Original geschrieben von Giuly
Hi,
ich hab ein problem.
ich will für ein argument einen defaultwert setzten.
ich hab da jetzt
f(const string& eins, const string& zwei ="drei")
das geht aber nicht.
im stroustrup stehts so.
Wie geht das richtig?

Zumal du als Parameterwert eine Referenz auf einen std::string (also string&) hast kannst du nicht ein const char* direkt zuweisen. Bei nur string geht das, da es den Konstruktor der const char* erwartet einsetzt.

Du musst es so schreiben (hab ioch jetzt nicht geteste, is aber sicher richtig):

void f( const string& eins, const string& zwei = string( "drei" ) );

tuxipuxi
23-12-2003, 17:46
Original geschrieben von panzi
Zumal du als Parameterwert eine Referenz auf einen std::string (also string&) hast kannst du nicht ein const char* direkt zuweisen. Bei nur string geht das, da es den Konstruktor der const char* erwartet einsetzt.

Du musst es so schreiben (hab ioch jetzt nicht geteste, is aber sicher richtig):

void f( const string& eins, const string& zwei = string( "drei" ) );

Guily's code funktioniert hier ohne probleme...

panzi
23-12-2003, 20:37
Original geschrieben von tuxipuxi
Guily's code funktioniert hier ohne probleme...

Wo geht es? (g++ version)

tuxipuxi
24-12-2003, 10:23
Original geschrieben von panzi
Wo geht es? (g++ version)

3.3.1.

das = bedeutet ja auch keine zuweisung, sondern ein default argument. warum sollte das auch nicht gehen?

gruss,
tuxipuxi.

panzi
25-12-2003, 14:14
Hab's ausprobiert, funktioniert tatsächlich, hätt ich nicht gadacht.

Giuly
25-12-2003, 14:25
Naja, hier gings nicht ^_^
Ich hab das const weggemacht, jetzt gehts :)
Trotzdem danke für die Antworten:o

wraith
25-12-2003, 20:41
Original geschrieben von Giuly

Ich hab das const weggemacht, jetzt gehts :)

Und jetzt ist es falsch ^^.
Kein standardkonformer Compiler wird das übersetzen,also würde ich dir raten deinen Compiler zu upgraden,oder diese Konstruktion zu vermeiden.

Giuly
08-01-2004, 02:06
Es lag btw daran, dass in der .cpp auch der default wert stand, was aber nicht geht. ich habs da rausgenommen, jetzt stehts nur noch im header (mit const in h und cpp), und es geht.


Kein standardkonformer Compiler wird das übersetzen,also würde ich dir raten deinen Compiler zu upgraden,oder diese Konstruktion zu vermeiden.

was ist denn der unterschied zwischen


int hans(const string& nix ="viel");

int hans(const string& nix)
{
return nix.length();
}
und
int hans(string& nix ="viel");

int hans(string& nix)
{
return nix.length();
}
ausser, dass man in der einen funktion den string "nix" nicht ändern darf?
gcc version 3.2.3 20030422 <-- is der nicht standart-konform oder was?

peschmae
08-01-2004, 06:30
Was heisst hier ausser? Das ist schon recht viel aufs mal.

MfG Peschmä

axeljaeger
08-01-2004, 10:42
Original geschrieben von Giuly

was ist denn der unterschied zwischen


int hans(const string& nix ="viel");

int hans(const string& nix)
{
return nix.length();
}
und
int hans(string& nix ="viel");

int hans(string& nix)
{
return nix.length();
}

Nicht, das du nichts ändern "darfst", du darfst nur Methoden aufrufen, die als const gekennzeichnet sind, sonst meckert dich der Compiler an (discards qualifier).

wraith
08-01-2004, 11:08
Original geschrieben von Giuly

was ist denn der unterschied zwischen
int hans(const string& nix ="viel");
und
int hans(string& nix ="viel");

Das eine ist korrekter C++ Code,das andere nicht.

Beim zweiten bindest du ein konstantes Objekt (ein konstantes Zeichenkettenliteral),an eine nicht konstante Referenz.

Also gcc 3.2 schmeißt beim zweiten bei mir einen Fehler,bei dir nicht?