Inicjalizacja QVector o określonym rozmiarze.

0

W dokumentacji mamy napisane:

QVector stores its items in a vector (array). Typically, vectors are created with an initial size. For example, the following code constructs a QVector with 200 elements:

QVector<QString> vector(200);

Tymczasem u mnie w QtCreatorze z Qt5.8.0 i MSVC2015 32bit otrzymuję:
error: C2059: syntax error: 'constant'.
O co chodzi?

0

Może pokaż kod?

0
#include <cell.h>
#include <QVector>

class Environment
{
public:
    Environment();
private:
    QVector<Cell> env(30);
};

z tym, że nie ma znaczenia, jaki typ wpiszę, dla QVector<bool> env(30); jest to samo.

0

Nie możesz tak inicjalizować elementów klasy. Tylko z =, albo w konstruktorze.

0

Ok, działa, tylko nie rozumiem, dlaczego mogę zainicjować w ten sposób zmienną typu QString, albo int, a nie QVector.
Poniższy kod skompiluje się poprawnie:

#include <QVector>
#include <QString>

class Environment
{
public:
    Environment(){env.resize(30);}
private:
    QVector<Cell> env;
    int x = 10;
    QString a = "aaaaa";
};
1

Możesz wszystkie, używając =, tak jak napisałem.

class Environment
{
private:
    int x = 10;
    QString a = "aaaaa";
    QVector<Cell> env = QVector<Cell>(30);
};
0

Teraz wszystko jasne, dzięki za pomoc.

0

A jak zrobić inicjalizację dwuwymiarowego wektora?
Próbowałem w konstruktorze:

class Environment
{
public:
    Environment(){
        this->area = QVector<QVector<Cell>(50)>(50);
    }
private:
    QVector<QVector<Cell>> area;
};

Jednak dostaję:
error: C2974: 'QVector': invalid template argument for 'T', type expected
error: C2955: 'QVector': use of class template requires template argument list

1

Próbujesz wsadzić inicjalizację do typu, to nie ma sensu ;​)
QVector (std::vector też) ma konstruktor, którego drugi argument to domyślna wartość:

 QVector<QVector<Cell>>(50, QVector<Cell>(50))

Przy czym powinieneś używać list inicjalizacyjnych konstruktora:

class Environment
{
public:
    Environment():
         area(50,QVector<Cell>(50))
    {
    }
private:
    QVector<QVector<Cell>> area;
};
0
kq napisał(a):

QVector (std::vector też) ma konstruktor, którego drugi argument to domyślna wartość:

Wiedziałem o tej opcji, ale jakoś nie skojarzyłem tego :/

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