Qt problemy przy tablicy statycznej

0

Witam, robię warcaby i plansze przedstawiam za pomocą tablicy statycznej i mam z nia problem, nie wiem jaki, wywala mi program po probie wypelnienia jej zerami, a wydaje się być wszystko ok. Tablica się wypełnia, ale po zakończeńczeniu nie otwiera mi się okno z plansza. Bez uzycia tej funkcji wypelniajacej tablice, plansza sie wyswietla.

class Plansza
{
    QGraphicsScene *scena;
    QGraphicsView *okno;
    Zespol *Moj,*Przeciwnik;
    int tab[8][8];
public:
    Plansza();
    void wyswietlPlansze();
    void dodajDruzyny(QGraphicsScene *scena/*, int tab[8][8]*/);
    void rysujPlansze(QGraphicsScene *scena);
    void zainicjujTablice(int tab[8][8]);
};
Plansza::Plansza()
{
    scena=new QGraphicsScene();
    okno=new QGraphicsView(scena);
    Moj=new Zespol();
    Przeciwnik=new Zespol();
    zainicjujTablice(tab);
    rysujPlansze(scena);
    dodajDruzyny(scena);
    okno->show();

}
void Plansza::zainicjujTablice(int tab[8][8])
{
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            tab[i][j]=0;
        }
    }
}
1

W załączonym kodzie wszystko wydaje się być ok, błąd prawdopodobnie jest gdzieś indziej.

Jednocześnie:

  1. To nie jest tablica statyczna. To jest tablica o statycznym rozmiarze.
  2. tab jest elementem klasy, nie musisz go przekazywać jako parametru funkcji dla tej samej instancji.
  3. nie używaj nagich new/delete, jeśli nie musisz.
  4. Staraj się nie używać C-tablic, ze względu na ich nieintuicyjne i niezgodne z idiomami C++ zachowanie gdy są parametrami funkcji. Możesz też pobawić się w kontener 1D z dwuwymiarowym widokiem (np. tak)
  5. Przygotuj MVCE
0

Nie wiem co to może być za problem, jak zakomentuje ta linijke z inicjowaniem tablicy to program sie wykonuje bez zadnego bledu, a wedlug mnie też wszytko wyglada ok, nawet nie ma co w tej funkcji być złego, chyba że Qt nie lubi takich tablic.

0

Qt magicznie nie wykrywa takich tablic. Błąd masz gdzie indziej.

0

Caly program się wykonuje, ale okno pojawia się tylko na chwile i wyświetla się komunikat 'Program nieoczekiwanie przerwał pracę.'

0

Błąd był w mainie
Było tak:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Plansza *nowa=new Plansza();

    return a.exec();
}

A jest tak:

int main(int argc, char *argv[])
{
    QApplication *a=new QApplication(argc, argv);

    Plansza *nowa=new Plansza();
    int ret=a->exec();
    delete a;
    delete nowa;
    return ret;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0