Problem z zwracaniem struktury ulamek


(Ssupelka) #1

Zastanawiam sie czy dobrze zadeklarowalam zmienna srednia. przy zwracaniu funkcji nastepuje blad:

in function `ulamek srednia(ulamek*, int)':

cannot convert ulamek* ' toulamek* in return

struct ulamek

{

  int licznik, mianownik;

  struct ulamek *next;

};

struct ulamek * srednia(struct ulamek *t, int s){

       struct ulamek suma, srednia1;

       int i;

       suma = t[0];

       for(i=1; s<=i; i++){

                suma.mianownik = t[i].mianownik * suma.mianownik;

                suma.licznik = (t[i].licznik * suma.mianownik) + (suma.licznik * t[i].mianownik);

                }

       srednia1.licznik = suma.licznik;

       srednia1.mianownik = suma.mianownik * s;

       return srednia1;

       }

(system) #2

to:

return srednia1;

zamien na to:

return (&srednia1);

funkcja srednia ma zwracać wskaźnik do struktury ułamek a nie całą strukturę (przynajmniej tak jest w deklaracji funkcji).


([alex]) #3

MasterOfPumpets , jeżeli zrobi wg twojego przepisu to dostanie wskaźnik na nieistniejące miejsce na stosie. Jak nie masz pojęcia o języku to poco dawać bezsensowne rady? Musisz zwracać przez wartość:

struct ulamek srednia(struct ulamek *t, int s)
  {
   ...
   return srednia1; 
  } [/code]


Lub jeżeli koniecznie chcesz wskaźnik to:

[code=php]struct ulamek * srednia(struct ulamek *t, int s)  {   struct ulamek *srednia1=(struct ulamek *)malloc(sizeof(struct ulamek));   ...   srednia1->licznik=...;   srednia1->mianownik=...;   return srednia1; // w funkcji wywołującej nie zapomnieć zwolnić  !!  } Lub:

struct ulamek * srednia(struct ulamek *t, int s)
  {
   static struct ulamek srednia1; // po zakończeniu funkcji nadal istnieje
   ...
   return srednia1;
  } [/code]

Generalnie powinieneś rozdzielić struktury ulamek i strukture elementlisty

struct ulamek { long licznik,mianownik; }

struct elementlisty { ulamek u; elementlisty *next; };

Funkcja średnia powinna zwracać ułamek przez wartość.

A inna funkcja z ułamku powinna tworzyć element listy.


(system) #4

Misiu pluszowy, spuść trochę z tonu. Masz rację - oczy mi za szybko sparsowały kod, spojrzałem na typy parametrów i nawet nie zajrzałem do środka. Nie wypowiadaj się o umiejętnościach kogoś, kogo nie znasz bo sie możesz naciąć. PEACE!