Darekdarek Temat założony przez niniejszego użytkownika |
Funkcja nie zwraca wartości » 2016-10-02 15:49:57 Witam wszystkich. Chciałbym prosić o wyjaśnienie dlaczego funkcja globalna nie zwraca wartości do zmiennej w main. Tzn. w debugerze widzę, że do zmiennej "splacony" jest wpisywana wartość zwracana przez funkcje, ale nie jest ona wyświetlana, proszę o wyjaśnienie dlaczego tak jest. #include <iostream> #include <cstring>
class dluznik { char imie[ 10 ]; float dlug; public: dluznik( char * naz, float kasa ); friend float splacony_dlug( dluznik * pierwszy = NULL, dluznik * drugi = NULL, dluznik * trzeci = NULL ); };
dluznik::dluznik( char * naz, float kasa ) : dlug( kasa ) { strcpy( imie, naz ); }
float splacony_dlug( dluznik * pierwszy, dluznik * drugi, dluznik * trzeci ) { std::cout << "\nDlug splacili :\n" << pierwszy->imie << std::endl << drugi->imie << std::endl << trzeci->imie << std::endl; float suma = 0; if(( drugi == NULL ) ) suma = pierwszy->dlug; else if( trzeci == NULL ) suma =( pierwszy->dlug + drugi->dlug ); else suma =( pierwszy->dlug + drugi->dlug + trzeci->dlug ); return suma; }
int main() { dluznik pierwszy( "Kot", 100 ), drugi( "Pies", 128.54 ), trzeci( "Niedzwiedz", 154.1 ); std::cout << "Kto splacil dlug?\n"; float splacony = splacony_dlug( & pierwszy, & drugi ); std::cout << splacony; }
|
|
mateczek |
» 2016-10-02 16:10:49 widać że wywołałeś ją z dwoma parametrami a nie z trzema !!! za mało parametrów. Ale dlaczego to się w ogóle kompiluje tego nie wiem |
|
Darekdarek Temat założony przez niniejszego użytkownika |
» 2016-10-02 16:23:10 Tak, ale pozostałe wskaźnik ustawione są jako parametry domyślne na null w deklaracji funkcji w definicji classy. Czy powinienem zrobić jeszcze deklaracje funkcji poza klasą? |
|
Monika90 |
» 2016-10-02 16:42:50 Twoja funkcja ma niezdefiniowane zachowanie, ponieważ parametr trzeci ma wartość NULL, a pomimo tego używasz go tutaj std::cout << "\nDlug splacili :\n" << pierwszy->imie << std::endl << drugi->imie << std::endl << trzeci->imie << std::endl;
I jeszcze dluznik( char * naz, float kasa );
tu powinno być const char * |
|
Darekdarek Temat założony przez niniejszego użytkownika |
» 2016-10-02 16:58:08 Dzięki za pomoc, ale czy mogłabyś dokładnie wyjaśnić co się tam działo. Ponieważ kompilator normalnie czytał tą linijkię, przechodził do instrukcji warunkowej i umieszczał w zmiennej wartość która później została zwrócona do zmiennej w main, ale się nie wyświetlała. |
|
mateczek |
» 2016-10-03 07:38:56 Czy powinienem zrobić jeszcze deklaracje funkcji poza klasą?
|
Ja to nawet nie wiedziałem że tak można :) nadać wartości domyślne w deklaracji przyjaźni klasy z funkcją. Wywołanie funkcji na rzecz wskaźnika o wartości NULL powinno wystrzelić program w kosmos. (nie wystrzeliło chyba tylko dlatego, że z pod tego wskaźnika czytasz a nie piszesz). Pierwsze zdziwko miałem jak ten program się w ogóle skompilował :P A drugie jak się do końca wykonał bez segfault:P Ja go odpaliłem na gcc-linux ciekawe jak by sobie visual z nim poradził |
|
Darekdarek Temat założony przez niniejszego użytkownika |
» 2016-10-03 09:47:05 Dzięki za odpowiedzi i nakierowane. Uzupełniłem trochę wiedzę :). Jak to mówią początki są zawsze trudne ;). |
|
« 1 » |