0

文字列を含む2次元ベクトルが必要なので、次のようなことを試しました:

QVector<QVector<QString*> > register_options(8, QVector<QString*>(8)); //getting 'expected identifier before numeric constant'
QVector<QVector<QString> > register_options; // getting 'field has incomplete type'

これは私がここで見つけた初期化です

クラススコープでベクトルを初期化することは不可能であり、コンストラクターで行う必要があることも読みましたが、クラススコープでvarのプロトタイプを定義することはできません。

私も試しました

//header
QVector<QString> register_bits; // field has incomplete type
QVector<QVector<QString> > register_options; // field has incomplete type
//source
registers::registers() : register_bits(8, 0), register_options(8, register_bits)
{ //...

私の質問は次のとおりです。クラススコープでベクトルを定義し、コンストラクターで初期化する方法は?

4

1 に答える 1

2

私の質問は次のとおりです。クラススコープでベクトルを定義し、コンストラクターで初期化する方法は?

C++ 11 初期化子リストを使用してメモリ内のそのような構造を初期化する方法の 1 つ:

class MyClass
{
private:
    QVector<QVector<QString> > vct {{"", ""}, {""}, {"", "", ""}};
};

またはインライン:

QVector<QVector<QString> > vct = {{"", ""}, {""}, {"", "", ""}};

または、コンストラクターまたは任意のクラスのメソッドで:

vct = {{"", ""}, {""}, {"", "", ""}};

私は試してみましたが、それはコンパイルされ、動作するはずです。上記のパターンは、元の投稿者がコメントで尋ねたように、実際には集計の初期化です。

于 2015-12-16T23:42:36.257 に答える