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

Jak zrobic by podprogram widział obiekt

Object Storage Arubacloud
0 głosów
160 wizyt
pytanie zadane 4 lutego 2016 w C i C++ przez Ditrix Mądrala (5,650 p.)
SIemanko!

Jak zrobić by podprogram widział obiekt ? Wyskakuje błąd iż nazwa obiektu nie jest zadeklarowana. Umieszczenie podprogramu pod funkcją jak i nad funkcją main nic nie daje. Jakieś pomysły ?

 

Ogólnie chce zrobić tablicę obiektów. Użytkownik ma sam decydować ile obiektów użyje. Dlatego chce zrobić funkcję void create, w której będę tworzył konstruktor danego obiektu.

1 odpowiedź

+1 głos
odpowiedź 5 lutego 2016 przez criss Mędrzec (172,590 p.)
wybrane 6 lutego 2016 przez Ditrix
 
Najlepsza
Tzn. co to jest ten podprogram? Funkcja?

I chcesz żeby widziała obiekt czy klase (typ) ? Doprecyzuj i nie próbuj używać pojęć których nie rozumiesz, bo potem tak wychodzi.

Jeśli ma widzieć obiekt... to tak nie rób. Musiałby być globalny, a tego nie chcemy. Od tego są argumenty, żeby coś przez nie przekazywać. Jeśli chodzi ci o klase, to wystarczy, że zadeklarujesz ją nad definicją funkcji.
komentarz 5 lutego 2016 przez Ditrix Mądrala (5,650 p.)

Podprogram(czyli tak to funkcja) nie podłączony do żadnej klasy, chce żeby widział obiekt

item *i = new item [n];

Otóż tworzę tą tablicę obiektów w main() i chce, żeby obiekt był widoczny w niezależnej funkcji w pliku głównym.

create()
{
    static int n=0;
    string nazwa;
    cout << "Podaj nazwe: " << endl;
    getline(string,nazwa);
    i[n]->item(1,nazwa);
    n++;
}

Musiałbym argumentem wysłać obiekt tak ?

komentarz 5 lutego 2016 przez criss Mędrzec (172,590 p.)
Tak, wyślij przez argument. Po co w ogóle kombinować inaczej?

I przestań nazywać funkcje "podprogramem" :P

Tylko że... co to właściwie jest? Najbardziej mnie zastanawia linijka 7. Wywołujesz konstruktor? Ale... obiekt już tam jest, co sam potwierdasz, bo wywołujesz konstruktor z istniejącego już obiektu (utworzyłeś całą tablice obiektów). To nie ma sensu.
komentarz 5 lutego 2016 przez Ditrix Mądrala (5,650 p.)
Ma to polegać na tym, że user wywołując funkcje przypisuje do itemka jego nazwę i poziom itemka. Wcześniej itemki mają wartości domyślne. Możesz też napisać jak mam przesłać obiekt jako argument ? Czytałem trochę, ale średnio rozumiem.
komentarz 5 lutego 2016 przez mustarrrd Obywatel (1,450 p.)
i[n]->item(1,nazwa);

Zacznijmy od tego, że to się nie ma prawa skompilować. Wywołujesz konstruktor na rzecz istniejącego obiektu, co jest samo w sobie bez sensu. Jeśli chcesz w już utworzonym obiekcie zmienić jakieś pola, to w klasie item napisz metodę w stylu 

void setName( string name )

 

komentarz 5 lutego 2016 przez criss Mędrzec (172,590 p.)
Nie bierz się za obiektowość, jeśli nie rozumiesz absolutnych podstaw.

Wiesz co to są argumenty funkcji? Jeśli tak, to nie ma żadnej różnicy między przesyłaniem do funkcji inta czy obiektu napisanej przez ciebie klasy. Jeśli jednak funkcja ma przesłany obiekt modyfikować, to funkcja powinna przyjmować referencje (znak & po nazwie typu), inaczej obiekt (albo jakiś typ podstawowy - nie ma różnicy) zostanie skopiowany.
komentarz 6 lutego 2016 przez Ditrix Mądrala (5,650 p.)

Rozumiem pojęcia. To był tylko przykład.

Sprawa wygląda następująca. Stworzyłem funkcje void create

void create(item &weapon[])
{
    string name_set;
    cout << "Podaj nazwe itemka: ";
    getline(cin,name_set);
    i[n].setName(name_set);
    i[n].setImprove();
    n++;
    i[n].show();
}

I wywołują ją tak.

item weapon[100];
create(weapon);

Wyskakuję błąd przy deklarowaniu funkcji. Jak zrobić by działało ?

komentarz 6 lutego 2016 przez criss Mędrzec (172,590 p.)

Po pierwsze: czym jest n? Nie używaj zmiennych globalnych, bo prędzej czy później się w tym pogubisz, przekaż rozmiar tablicy jako jeden z argumentów. A tablice jako wskaźnik.
Także deklaracja powinna wyglądać tak: 

void create(item* weapons, unsigned n);

 

Podobne pytania

0 głosów
3 odpowiedzi 180 wizyt
pytanie zadane 5 grudnia 2018 w C i C++ przez Mick_SQ6IYV Obywatel (1,020 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 27 sierpnia 2016 w C i C++ przez hubercik Użytkownik (560 p.)
–2 głosów
2 odpowiedzi 228 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...