2014-11-26 4 views
0

У меня есть структуру, которая включает в себя многомерный массив, содержащий QString array2D:Задайте значения многомерного массива является членом структуры C++/Qt

/* stat.h */ 
#include <QString> 

struct stat 
{ 
    QString name; 
    QString array2D[2][4]; 
} 
extern struct stat myStat; 

/* stat.cpp */ 
#include <"stat.h"> 
struct stat myStat = { "Structure 1", { {"one","two","three","four"},{"five","six","seven","eight"} } }; 

Этот фрагмент кода работает. Тем не менее, структура собирается получить в качестве новых членов более сложные массивы строк, 3 и 5 измерений, с десятками и сотнями элементов. Помещение всего в одну строку будет выглядеть уродливым, поэтому мне нужно найти более разумный способ инициализации, используя некоторую ссылку на массив, а не перечисляя все это. Я пробовал следующий код, но он не работает:

/* stat.cpp */ 
#include <"stat.h"> 

QString myArray[2][4] = { {"one","two","three","four"},{"five","six","seven","eight"} }; 
struct stat myStat = { "Structure 1", myArray}; // BAD!! 
struct stat myStat = { "Structure 1", myArray[][]}; // BAD!! 
struct stat myStat = { "Structure 1", &myArray}; // BAD!! 

Это не сработало:

/* stat.cpp */ 
#include <"stat.h"> 

struct stat myStat = { "Structure 1",NULL}; 
myStat.array2D = { {"one","two","three","four"},{"five","six","seven","eight"} }; // BAD!! 

Что обходной путь может быть использован в данном случае?

ответ

0

Ваша проблема такая же, как при попытке скопировать значения из таблицы в другую с помощью простого оператора '='. Ты не можешь.

int a[3] = {5,5,5}; 
int a2[3] = a; 

error: array must be initialized with a brace-enclosed initializer

У вас есть два варианта: 1) Используйте указатель в вашей структуры (вместо copiyng значения, вы указываете массив)

struct stat 
{ 
    QString name; 
    QString * array2D[2][4]; 
} 
extern struct stat myStat; 

или

struct stat 
{ 
    QString name; 
    QString * array2D[4]; 
} 
extern struct stat myStat; 

(в зависимости от того, что вы действительно хотите)

Затем вам нужно будет дать массив вручную ...

2) сделайте копию самостоятельно.

Однако учтите, что C++: вы обнаружите, что «struct» является необязательным при объявлении переменной и что конструктор также подходит вашим потребностям.

Рассмотрите также использование QVector/QStringList

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