C++ Qt creator - tablica

0

Witam, mam taki problem, otóż pisze przy pomocy qtcreatora i mam oto taki kod:

 ui->testowe_widget->clear();
    int zakres=0, ilosc=1;
    zakres=ui->przedzial_edit->text().toInt();
    ilosc=ui->ilosc_edit->text().toInt();
    srand(time(NULL));
    int tab[ilosc];

nie chce mi zadeklarować tablicy, to samo jest jak przesyłam jakiegoś inta do funkcji :/ w visualu np tak mogę tutaj nie. Nie mam pojęcie jak to obejść :/

0

To nie jest poprawny C++, użyj vector<int>.

0

Eeeee no to nie wiem o co ci chodzi. gdzie mam to użyć, długo pisze w c++ i nigdy nie używałem. Dopiero przy tym Qt creatorze mam jakieś durne problemy :/ Hmmm, chyba znam powód to w czym deklaruje tablice to slot, może to jest problemem :/

0

Standard nie pozwala na utworzenie na stosie tablicy o zmiennej ilości elementów! Jeśli już koniecznie musisz bawić się w surowe tablice, to utwórz wskaźnik i zaalokuj stosowną ilość int'ów.
Takie rozwiązanie jest mało eleganckie i jak Zjarek zasugerował, powinno się użyć vector'a.

0

rozmiar tablicy powinien być wyrażeniem stałym. Przez zmienna możesz tylko podać rozmiar tablicy dynamicznej.

0

Albo tak:

int* tab = new int[ilosc];

albo:

#include<vector>
std::vector<int> tab;
1

Skoro piszesz w QT to użyj QVector<int>.

0
rybak16 napisał(a)

w visualu np tak mogę tutaj nie. Nie mam pojęcie jak to obejść :/

Nawet jeżeli Visual na to pozwala, to jest to jakoś automagicznie rozwiązywane w tle. Standard języka na to nie pozwala z oczywistych względów. Lepiej zapomnij o deklarowaniu statycznej tablicy o zmiennym rozmiarze(!!)

0
rybak16 napisał(a)

w visualu np tak mogę tutaj nie.

W Visual Studio kodzę od hmmmm....wersji 6.0 i pierwsze słyszę,żeby na takie cyrki pozwalał.Pewnie ci się z gcc(?) fiknęło,ten faktycznie dopuszczał taką konstrukcję.No nie nie wiem,jak sprawa wygląda z VS2010,bo tego nie używałem

Wracając do meritum problemu,to tak jak ci koledzy powiedzieli już - dynamiczne tablice w C++ należy albo tworzyć przy pomocy new typ[ileElementów] albo użyć klasy QVector.

0

dzieki za odpowiedzi, działa. W zasadzie naprawiłem jeszcze przed przeczytaniem odpowiedzi ale nie sadziłem wcześniej że tak nie wolno :P Teraz bede pamiętał :D Thx

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