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

Tworzenie obiektu klasy w innej klasie

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,128 wizyt
pytanie zadane 26 marca 2017 w C i C++ przez Mikusbombro Użytkownik (990 p.)

Istnieje klasa Gracz i klasa Fight. Gracz posiada metodę menu_glowne, które zawiera menu główne. Po wybraniu opcji 1 powinien zostać utworzony nowy obiekt klasy Fight, a później powinna zostać wywołana metoda tej klasy walcz. Powinny również do klasy Fight posłane być atrybuty klasy Gracz. Mam pytanie, czy aby to działało, to te klasy muszą się przyjaźnić, czy wystarczy, że tylko klasa Gracz może się przyjaźnić z metodą walcz? Próbowałem wielu rozwiązań, ale mi nie działa. Próbowałem użyć takiej deklaracji:

case 1:
{
       Fight f1;
       f1.walcz(Gracz g1);
       break;
}

Nie działa, wyskakuje expected primary-expression before g1. A może to jest poprawne, tylko źle ustawiłem mechanizm przyjaźni? Bardzo prosiłbym o pomoc, z góry dziękuję.

1 odpowiedź

0 głosów
odpowiedź 26 marca 2017 przez draghan VIP (106,230 p.)
O ile metoda Figrht::walcz nie jest prywatna, żadna deklaracja przyjaźni nie jest potrzebna. Popełniasz błąd, próbując skonstruować nowy obiekt klasy Gracz na liście argumentów metody f1.walcz.

Pokaż nagłówek tej metody.

Na marginesie: metoda 'menu_glowne' w klasie Gracz brzmi trochę jak widelec wbudowany w kubek. Niby się da, ale gdzie w tym sens?
komentarz 26 marca 2017 przez Mikusbombro Użytkownik (990 p.)
Czy to znaczy, że aby wysłać argumenty klasy Gracz nie mogę wysyłać całego obiektu, tylko po kolei wszystkie potrzebne argumenty?
komentarz 26 marca 2017 przez draghan VIP (106,230 p.)

Nie rozumiem. Pozwolę sobie siebie zacytować:

Pokaż nagłówek tej metody.

Chodzi oczywiście o wspomnianą metodę Fight::walcz().

komentarz 26 marca 2017 przez Mikusbombro Użytkownik (990 p.)
Niestety nagłówka nie pokaże, bo wysyłałem to z innego komputera, niż z tego na którym był kod, a to dlatego że ten ma internet a tamten nie ma. A we wcześniejszym komentarzu chodziło mi o to, czy tak trzeba to zrobić:

Fight f1;

f1.walcz(jeden_atrybut, drugi_atrybut...)

Chyba nie zrozumiałeś, dlatego że przez przydatek napisałem argumenty, zamiast atrybuty.
komentarz 26 marca 2017 przez draghan VIP (106,230 p.)

Przypuszczam, że Fight::walcz przyjmuje referencję do obiektu Gracz (jak poniżej), ale pewności nie mam więc zapytałem.

void Fight::walcz(Gracz &g);

Nie możesz utworzyć nowego obiektu Gracz kiedy podajesz argumenty metody. Zgaduję, że masz gdzieś już utworzony obiekt Gracz o nazwie g1 (jeśli nie, to musisz go stworzyć przed wywołaniem f1.walcz). Wtedy wywołanie metody wygląda po prostu tak:

Fight f1;
f1.walcz(g1);

 

komentarz 26 marca 2017 przez Mikusbombro Użytkownik (990 p.)
OK, dzięki, może zadziała

Podobne pytania

0 głosów
0 odpowiedzi 1,186 wizyt
pytanie zadane 31 lipca 2016 w C i C++ przez Pac Plus Mądrala (5,560 p.)
0 głosów
1 odpowiedź 625 wizyt
pytanie zadane 25 stycznia 2017 w C i C++ przez robertwe Gaduła (4,620 p.)
0 głosów
2 odpowiedzi 2,076 wizyt
pytanie zadane 18 października 2016 w C i C++ przez sh1nen Obywatel (1,570 p.)

93,187 zapytań

142,202 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2269p. - Tomasz Bielak
  5. 2235p. - Łukasz Siedlecki
  6. 2006p. - Michal Drewniak
  7. 2006p. - rucin93
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...