Portál AbcLinuxu, 10. května 2025 01:10

Dotaz: Qt - dvojrozmerne pole objektu

Otto Šabart avatar 21.3.2011 21:06 Otto Šabart | skóre: 13 | blog: KatiePC blog
Qt - dvojrozmerne pole objektu
Přečteno: 434×
Odpovědět | Admin
Ahojte.. Mel bych na vas dotaz ohledne Qt. Zkousim si naprogramovat jednu mensi ulohu a zasekl jsem se na nasledujicim: Mam v hlavickovem souboru definovane dvojrozmerne pole na objekty takto:
QVector<QVector<<Figure*> > m_pole;
Ve zdrojovem souboru mu pak urcim velikost:
m_pole.resize(size);
for (int x = 0; x < m_pole.size(); x++) {
  m_pole[x].resize(size);
}
Rekneme, ze promenna (vyse) => size = 8. Potom tedy inicializuji prvky pole:
  m_pole[4][4] = new Figure(4, 4, Figure::King, this);
  m_pole[7][7] = new Figure(7, 7, Figure::Queen, this);
Nasledne pak v kodu potrebuji pristoupit pres pole k objektu Figure a zavolat jeji metodu:
  Figure::Type type = m_pole[x][y]->type();
Zde prichazi problem. Po zavolani metody nastane Segmentation fault. Debugger hlasi, ze ho zpusobuje fce Figure::type(). Jeste tedy prikladam definici tridy Figure:
zdrojak
hlavickovy soubor
Jeste dodam, ze uz jsem ze zoufalosti zkousel ruzne kombinace volani metody.. napriklad:
 Figure::Type type = ((Figure*)m_pole[x][y])->type();
 Figure::Type type = *m_pole[x][y])->type();

Najde se to nekdo, kdo by mi dokazal poradit:-)?
*´¨)¸.·´¨)¸.·***·>>> www.seberm.com

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

David Watzke avatar 21.3.2011 21:17 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jen tak pro zajímavost, proč si prostě neuděláš obyčejný 2D pole figur (8x8) a šaškuješ místo toho s vektorama?
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Otto Šabart avatar 21.3.2011 21:20 Otto Šabart | skóre: 13 | blog: KatiePC blog
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
Ted tu koukam na objekt QVector2D... Ten myslis?
*´¨)¸.·´¨)¸.·***·>>> www.seberm.com
Otto Šabart avatar 21.3.2011 21:23 Otto Šabart | skóre: 13 | blog: KatiePC blog
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
nebo myslis udelat to uplne klasicky...a nemichat do toho vubec Qt?
*´¨)¸.·´¨)¸.·***·>>> www.seberm.com
David Watzke avatar 21.3.2011 21:27 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
Myslím přesně tohle.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
22.3.2011 13:27 Sten
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Objekt (this), který vytváří ony objekty, existuje i ve chvíli, kdy tu metodu voláte? Neděláte třeba jeho kopii?

Jsou všechny prvky, ke kterým přistupujete pomocí x a y, inicializované (resp. nevoláte nějaký, který inicializovaný není)?

Nepřesouváte ty prvky?
Josef Kufner avatar 23.3.2011 00:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zavolej si nějakou dummy metodu, o které víš, že nemá na čem zkolabovat. Třeba tam bude jen printf("Hello world.") nebo tak něco (:-D). Ať víš, jestli je problém s voláním, nebo obsahem. Pokud to projde, tak tomu předáváš něco, co přestane existovat. Jinak by to fungovat mělo.
Hello world ! Segmentation fault (core dumped)
Otto Šabart avatar 23.3.2011 18:55 Otto Šabart | skóre: 13 | blog: KatiePC blog
Rozbalit Rozbalit vše Re: Qt - dvojrozmerne pole objektu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Moc dekuji vsem za rady. Uz jsem si chybu opravil. Mel jsem napsanou spatne podminku ve for cyklu:
if (!m_pole[x][y])
  continue;
a nasledne s polem pracoval a pristupoval do prvku, kde objekt Figure vubec nebyl.
*´¨)¸.·´¨)¸.·***·>>> www.seberm.com

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.