• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Referencja struktury w funkcji (c++)

0 głosów
1,414 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
edycja 20 marca 2018 przez Patrycjerz

Witam napisałem program nie jest on skomplikowany bo chodzi o wywołanie i tutaj leży problem wiem w którym miejscu i z czym jednak nie wiem jak go rozwiązać. Mianowicie chodzi tutaj o zmienna struktury mm (który nie jest zainicjalizowana). Po prostu nie wiem jak z tego wybrnąć.

#include <iostream>
struct Batonik
{
        char marka[40];
        double waga;
        int kalorie;
};

void fun (Batonik & ps, const char * naz = "Millenium Munch", double masa = 2.85, int wart = 350);

int main()
{
        Batonik mm; //powinna byc zainicjalizowana!
        fun (mm);

        return 0;
}

void fun(Batonik *ps, char * naz, double masa, int wart)
{
        naz = ps->marka;
        masa = ps->waga;
        wart = ps->kalorie;
        std::cout << "Nazwa: "<< naz << "\nWaga: " << masa << "\nKalorie: " << wart << std::endl;
}

 

komentarz 20 marca 2018 przez mokrowski Mędrzec (159,000 p.)
A tak ogólnie.... to .. co ty w tym kodzie chcesz osiągnąć? Bo błędy zaciemniają obraz. Z jednej strony foo(...) wygląda na funkcję która ma coś inicjować, typy danych nie zgadzają się z deklaracją a w samym ciele funkcji przypisujesz coś do zmiennych które przekazałeś i je wyprowadzasz na ekran??

1 odpowiedź

+1 głos
odpowiedź 20 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)
Ten kod nie zadziała z powodu braku definicji funkcji z referencją. Obiekt struktury nie musi być zainicjalizowany przed wywołaniem funkcji, jedynie odczyt z takiego obiektu może być ryzykowny, ale sam język czegoś takiego nie zabrania.
komentarz 20 marca 2018 przez Sic Dyskutant (8,510 p.)
Dobra dziękuję. Rozwiązałem ten problem bez użycia referencji i zamieniając char na string.

A jakbym mógł zdefiniować referencje w funkcji ?
1
komentarz 20 marca 2018 przez Patrycjerz Mędrzec (192,320 p.)

Deklaracje

void fun (Batonik & ps, const char * naz = "Millenium Munch", double masa = 2.85, int wart = 350);

oraz

void fun(Batonik *ps, char * naz, double masa, int wart);

dotyczą różnych funkcji. Mam rozumieć, że chciałeś stworzyć funkcję, która inicjuje obiekt struktury? Otóż najpierw musisz zrobić deklarację i definicję funkcji zgodne ze sobą (typem zwracanym, nazwą, typami argumentów). Potem przypisujesz polom obiektu kolejne argumenty funkcji.

Trochę nie rozumiem, dlaczego masz problem z tak trywialnym kodem.

komentarz 20 marca 2018 przez Sic Dyskutant (8,510 p.)
Po prostu źle nacisnąłem i nie zwróciłem uwagi na to. Dopiero po wstawieniu kodu się zorientowałem.

Podobne pytania

0 głosów
3 odpowiedzi 1,968 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez kptpiotr Początkujący (330 p.)
+1 głos
1 odpowiedź 415 wizyt
pytanie zadane 24 lutego 2019 w C i C++ przez Teslum_369 Gaduła (4,190 p.)
0 głosów
2 odpowiedzi 679 wizyt
pytanie zadane 7 listopada 2015 w C i C++ przez niezalogowany

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,371 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...