Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: C++ vektor  (Přečteno 2768 krát)

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
C++ vektor
« kdy: 09 Prosince 2011, 15:52:19 »
Ahoj, tak zase zápasím s céčkem :) Chcisi u hrdiny vytvořit inventář pomocí vektoru a trošku jsem se na tom zasekl... kompilátor nevyhazuje errory, ale program prostě spadne.

dejme tomu že mám 3 třídy(vektor v hlavicce mam stejne jeko includy ostatnich trid):

Kód: [Vybrat]
Postava.h
private:
vector<Inventar *> m_inv;
public:
void pridejPredmet(Inventar * inv);
void vypisInventar();

Postava.cpp
void Postava::pridejPredmet(Inventar *inv){
            this->m_inv.push_back(inv);

};
void Postava::vypisInventar(){
            cout<<"Tak se podivejme co se da najit po kapsach.../n Usopleny kapesniky, svaby a karamelky nepocitam.";
            int i;
            for(i=0; i< this->m_inv.size(); i++){
                cout<<i<<": "<<this->m_inv[i]->vratNazev()<<endl;
               
            }

        };

Kód: [Vybrat]
//predmet
Prase.h
private:
Inventar * m_inv;

Prase.cpp
m_inv = new Inventar("Prase",3);
postava->pridejPredmet(m_inv);

Kód: [Vybrat]
Inventar.h
 public:
    Inventar(string nazev, int vaha);
    private:
    string m_nazev;
    int m_vaha;
Inventar.cpp
//nic krome konstruktoru

Když se pokusím zavolat vypisInventar(); nebo jen cout<<m_int.size(); tak to spadne :-/ netusim co delam blbe. Nevi nekdo?
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:C++ vektor
« Odpověď #1 kdy: 09 Prosince 2011, 16:19:07 »
Todle by mělo fungovat:

Kód: [Vybrat]
void Postava::vypisInventar(){
            cout << this->m_inv.size();             
}
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
Re:C++ vektor
« Odpověď #2 kdy: 09 Prosince 2011, 16:23:50 »
bohužel :( zase spadne...
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:C++ vektor
« Odpověď #3 kdy: 09 Prosince 2011, 16:28:09 »
Tak jsem slepej a nevidím to... jedině poslat vše o debugovat... co je v this->m_inv v inkriminovanou dobu.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
Re:C++ vektor
« Odpověď #4 kdy: 09 Prosince 2011, 16:54:09 »
debugovat neumim, jak to zjistím? zkoušel jsem něo googlit ale né moc úspěšně...
jinak sem to hodil sem, pokud by se s tím někomu chtělo piplat
http://leteckaposta.cz/378433925
spadne to pokud zadáte jméno a stisknete i a odentrujete (spustí se ta fce)
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Kedrigern

Re:C++ vektor
« Odpověď #5 kdy: 09 Prosince 2011, 17:07:56 »
No možná by bylo dobré, kdyby si sem dal něco jako ten výpis v první příspěvku, ale kompilovatelný. Ideálně v jednom souboru (ať to jde dobře číst bez širšího seznamování). Rád si oživím staré dovednosti, ale zas na to mám limitovaný čas.

Imho je chyba, co si vybavuji, házet do vectoru pointry, jelikož v nich už je obsažena nějaká referenční sémantika. Ale je to rok, co jsem v cpp psal.

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
Re:C++ vektor
« Odpověď #6 kdy: 09 Prosince 2011, 17:09:35 »
uf... háže to segmentation fault a ten soubor sesmolím (co mi zbejvá :D )
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Kedrigern

Re:C++ vektor
« Odpověď #7 kdy: 09 Prosince 2011, 17:13:04 »
Jo a mám pravdu: http://www.cplusplus.com/reference/stl/vector/vector/

Kdybys to chtěl opravdu jinak, tak je správné řešení vlastní alokátor (tak nějak tipuji).

Taky jsem psal v cpp rpg hru. Je to docela těžké, protože to chce velkou praxi (právě kvůli těm referencím a pointrům).

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
Re:C++ vektor
« Odpověď #8 kdy: 09 Prosince 2011, 17:16:40 »
uf příklad? jak tam nemaj být pointery? začínám a teď jsem velice blízko španělské vesnici :D
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
Re:C++ vektor
« Odpověď #9 kdy: 09 Prosince 2011, 17:33:21 »
je to v pr*** protoze kdyz to napisu jako jeden soubor tak to jede :o
Kód: [Vybrat]
#include <iostream>
#include <vector>


using namespace std;

class Inventar{
 private:
    string m_nazev;
    int m_vaha;

 public:
    Inventar(string nazev, int vaha){
    m_nazev = nazev;
    m_vaha = vaha;
    }
    string vratNazev(){
    return m_nazev;
    }
    };

class Postava{
private:
vector<Inventar *> m_inv;
public:
void pridejPredmet(Inventar *inv){
            this->m_inv.push_back(inv);

};
void vypisInventar(){
            cout<<"Tak se podivejme co se da najit po kapsach.../n Usopleny kapesniky, svaby a karamelky nepocitam.";
            int i;
            for(i=0; i< this->m_inv.size(); i++){
                cout<<i<<": "<<this->m_inv[i]->vratNazev()<<endl;

            }

        };
};
class Prase{
private:
Inventar * m_inv;
public:
void provedAktivitu(Postava * po){
m_inv = new Inventar("Prase",3);
po->pridejPredmet(m_inv);
}
};
int main()
{
    Postava * Hero = new Postava();
    Prase * chro = new Prase();
    chro->provedAktivitu(Hero);
    Hero ->vypisInventar();
    return 0;
}
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

Martin - ViPEr*CZ*

  • Závislák
  • ***
  • Příspěvků: 3047
Re:C++ vektor
« Odpověď #10 kdy: 09 Prosince 2011, 20:46:51 »
Jo a mám pravdu: http://www.cplusplus.com/reference/stl/vector/vector/

Kdybys to chtěl opravdu jinak, tak je správné řešení vlastní alokátor (tak nějak tipuji).

Taky jsem psal v cpp rpg hru. Je to docela těžké, protože to chce velkou praxi (právě kvůli těm referencím a pointrům).

??? do vectoru se nesmí pushnout dynamickej alokovanej objekt, ale statickej? :o Jsem si vždy myslel, že to je fuk... a klidně objekty posílal. S čím si to vždy ale neporadí je to, že budu ukládat do vectoru structuru a v té struktuře bude další vector s tou samou strukturou... takovej tree vlastně... a každá struktura má navíc v sobě iterátor na pole nadřazené (první prvek toho pole). To jak se zanoří párkrát a je těch položek docela dost (řekněme více jak 1000 a méně jak 10 000), tak to vždy kleklo. Nooo nejsem takovej guru teda... ale nemožnost dávat do vectoru objekty by bylo docela o ničem.
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

Kedrigern

Re:C++ vektor
« Odpověď #11 kdy: 10 Prosince 2011, 22:12:19 »
Tak jsem hledal a asi jsem se spletl. Nejspíše s tím, že se nemá dělat pointer na samotný vector,. Např: vector<vector<int> * >, omlouvám se za zmatení.

Pana_Ruplahlava

  • Aktivní člen
  • *
  • Příspěvků: 172
Re:C++ vektor
« Odpověď #12 kdy: 10 Prosince 2011, 22:14:57 »
doteď nechápu proč do rozhození do tříd se to chová jinak než když je to v jednom. musel jsem to vyžešit přes klasický pole a to není to co jsem chtěl :-/
Největší práce při instalaci linuxu byla sundat nálepku Designed For Microsoft Windows XP :)

 

Provoz zaštiťuje spolek OpenAlt.