Prosta funkcja - 2 argumenty przekazywane do funkcji, problem z deklaracją
Ostatnio zmodyfikowano 2014-11-12 21:59
Uczniak Temat założony przez niniejszego użytkownika |
Prosta funkcja - 2 argumenty przekazywane do funkcji, problem z deklaracją » 2014-11-12 21:32:56 Witam, mam pytanie czy funkcja zadeklarowana w ten sposób ma prawo działać? Wydaje mi się, że w wyniku powinienem dostać 5, jednak nie mogę tego skompilować. int mmo(int x, int y = x){ return x+y+1; } int main(int argc, char** argv){ cout << mmo(2) << endl; return 0; } To mój pierwszy post więc proszę o wyrozumiałość. |
|
Tomek_z_W11 |
» 2014-11-12 21:37:28 Po pierwsze, to zapis int mmo(int x, int y=x) jest błędny, jeżeli chcesz pod y przypisać x, to w ciele funkcji, w ten sposób:
int mmo(int x, int y) { y=x; return x+y+1; }
a w momencie w którym wywołujesz funkcje w maine, dajesz funkcji jeden argument, a ona przyjmuje dwa argumenty, także coś się nie zgadza. Powinno być tak:
mmo(1, 2);
Pomijam fakt, że to troche bez sensu dawać funkcji dwa argumenty, z czego de facto korzystasz z jednego, bo ten drugi ma taką samą wartość jak ten pierwszy. Równie dobrze możesz napisać: return x+x+1; |
|
Uczniak Temat założony przez niniejszego użytkownika |
» 2014-11-12 21:43:26 ale w deklaracji wolno napisać np int mmo(int x, int y=5)? Daje jeden argument ponieważ chciałem przypisać wartości y wartość x, zatem podając x podaje dwa argumenty? Wiem że sama funkcja nie ma sensu użytkowego jednak chodziło mi o taką wariację na temat funkcji. |
|
Monika90 |
» 2014-11-12 21:52:28 Niestety domyślna wartość parametru nie może odowływać się do wcześniej zadeklarowanych parametrów. (Żeby mogła to porządek wartościowania argumentów fukcji musiał by być ustalony jako: od lewej do prawej. A w C++ ten porządek nie jest ustalony w ogóle) Rozwiązaniem jest dodanie przeciążenia: int mmo( int x, int y ) { return x + y + 1; }
int mmo( int x ) { return mmo( x, x ); }
|
|
Uczniak Temat założony przez niniejszego użytkownika |
» 2014-11-12 21:59:48 Dziękuje bardzo za pomoc:) |
|
« 1 » |