Witam. Muszę zrobić pewne ćwiczenie z c++ z referencjami. Program ma wyglądać tak, że robimy strukturę o nazwie batonik z trzema polami. Następnie tworzymy trzy nowe zmienne odpowiadające tym polom ze struktury, które musimy przekazać do funkcji i przez referencje zmodyfikować tą strukturę. Zadanie już zrobiłem, ale na początku źle zrozumiałem treść zadania i zamiast funkcji void zrobiłem funkcje zwracająca referencję na strukturę. Jednak pierwszy program też po części zadziałał, jednak pojawił się jakiś błąd z polem marka. Generalnie kod wygląda tak:
#include <iostream>
#include <string>
using namespace std;
struct batonik
{
string marka = "abcd";
float waga = 1.5;
int kalorie = 3;
};
batonik & funkcja(string m, float w, int k);
int main()
{
string a = "Snickers";
float b = 12.5;
int c = 250;
batonik struktura;
batonik & referencja = struktura;
cout<<"Wartosc struktury batonik st: "<<endl;
cout<<"Nazwa: "<<struktura.marka<<endl;
cout<<"Waga: "<<struktura.waga<<endl;
cout<<"Kalorie: "<<struktura.kalorie<<endl;
referencja = funkcja(a, b, c);
cout<<"\nWartosc struktury batonik st po funkcji: "<<endl;
cout<<"Nazwa: "<<struktura.marka<<endl; //po funkcji zawartosc tej zmiennej jest zbugowana, pozostale sa ok
cout<<"Waga: "<<struktura.waga<<endl;
cout<<"Kalorie: "<<struktura.kalorie<<endl;
return 0;
}
batonik & funkcja(string m, float w, int k)
{
batonik fst; //tworze strukture typu batonik
batonik & rf = fst; //tworze referencje typu batonik i przypisuje jej strukture batonik fst
rf.marka = m; //zmieniam dane za pomoca referencji rf
rf.waga = w;
rf.kalorie = k;
cout<<"\nfst.marka: "<<fst.marka<<endl; //dane zostaly zamienione przez referencje rf, bo wyswietlaja sie poprawnie
cout<<"fst.waga: "<<fst.waga<<endl;
cout<<"fst.kalorie: "<<fst.kalorie<<endl;
return rf;
}
Program działa, jednak zmienna struktura.marka po wywołaniu funkcji jest zbugowana (w moim przypadku pojawia się nazwa Snic <). Pole waga i kalorie zostały dobrze zmienione. Wiem, że program z zadania miał tak nie wyglądać, bo funkcja miała być typu void, ale zastanawia mnie, co jest tutaj źle, że zmienna struktura.marka jest zbugowana.
I jeszcze jedno: jak zwracamy referencje, to wynik funkcji musimy przypisać też do referencji, zgadza się? Czyli powyższy kod:
batonik & referencja = struktura;
referencja = funkcja(a, b, c);
Jest ok?