2015-12-16 102 views
0

我想有一個2個維含向量串所以我嘗試類似的東西: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' 

這是我發現here

初始化我也看了,它的不可能在類作用域中初始化矢量,並且應該在構造函數中完成,但我知道我不能在類作用域中定義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) 
{ //... 

所以我的問題是:如何定義在類範圍內的載體中,然後構造函數初始化呢?

+0

您是否熟悉C++初始值設定項列表?也許這就是你需要的。但是,我不知道Qt是如何工作的,只是從最後一句中得出結論。 – errikos

+0

編輯之後:標題意味着在類中還是全局範圍? – errikos

+2

「無法打印的類型」建議您忘記了包含所需的標題 –

回答

2

所以我的問題是:如何在類範圍中定義向量,然後在構造函數中初始化它?

一種可能的方式與C++ 11初始化列表存儲器來初始化這樣的結構:

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

或者在線路:

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

或者在構造函數或任何類的方法:

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

我試過了,編譯和sh會工作。上面的模式實際上是一個aggregate initialization作爲原始海報在評論中問。

+0

[問題](http://stackoverflow.com/questions/28075328/could-not-convert-from-brace-enclosed-initializer-list-to-stdvector)它正在工作,但我還有一個問題。大括號是什麼?這是一種隨機初始化的權利? – Fritz

+1

C++ 11中還有新的初始化程序列表和聚合初始化程序列表:http://en.cppreference.com/w/cpp/language/aggregate_initialization – AlexanderVX