Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja nie zwraca wartości

Ostatnio zmodyfikowano 2016-10-03 09:47
Autor Wiadomość
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.

C/C++
#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;
}
P-152186
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
P-152187
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ą?
P-152188
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
C/C++
std::cout << "\nDlug splacili :\n"
<< pierwszy->imie << std::endl
<< drugi->imie << std::endl
<< trzeci->imie << std::endl;


I jeszcze
C/C++
dluznik( char * naz, float kasa );
tu powinno być
const char *
P-152189
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.
P-152191
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ł
P-152204
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 ;).
P-152206
« 1 »
  Strona 1 z 1