2015-12-16 2 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 ould work. Вышеупомянутый шаблон на самом деле является 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

Смежные вопросы