2011-05-09 75 views
3

我想創建一個結構,其中有多個字符串數組。爲了我的目的,我想使用std :: string數組,但char *數組也可以工作,如果他們可以完成工作。無論哪種方式,我不知道如何初始化的東西。這是我有:結構中的字符串/字符數組

initialize.h

#include <string> 

struct myStruct 
{ 
    std::string x[22]; 
    std::string y[8]; 
}; 

extern myStruct data[22]; 

myform.cpp

#include <initialize.h> 
#include <string> 

myStruct data[22]; 

data[0].x = {"a", "b", "c", "d", ...}; 

我得到看起來像這樣的錯誤:

錯誤1個錯誤C2059:語法錯誤:'{' 錯誤2錯誤C2143:語法錯誤:缺少';'之前'{' 錯誤3錯誤C2143:語法錯誤:缺少';'之前'}'

我已經嘗試過各種與char *數組或std :: string *數組的排列,但無濟於事,我相當卡住了。我忘了一些根本性的東西嗎

在此先感謝。

+2

您正在聲明660個不同的字符串。這是你的意圖嗎? – 2011-05-09 21:53:02

回答

0

您不能使用{}數組初始化語法賦值給數組。初始化數組定義時,右後它只能用於:

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

但不

int a[3]; 
a = { 3, 4, 5 }; //error 

你不會圍繞一個循環或每一個成員的手動初始化得到。但我認爲新的C++ 0x標準改進了這一點,並使得這個(甚至更多的初始化語法)成爲可能。

0
myStruct data[22]; 

上面的說法,你已經創建myStruct型對象,並有它自己的x,y字符串數組的大小分別爲22.8 每個對象。

只能在聲明而不是賦值操作時才能直接初始化陣列的每個成員。所以,你可以嘗試 -

data[0].x[0] = "a"; 
data[0].x[1] = "b"; 

// .... 

你在做什麼錯誤是類似的東西 -

int a[5] ; 
a = { 1,2,3,4,5 } ; // Error. 

int a[] = { 1,2,3,4,5 } ; // Correct. 
0

{"a", "b", "c", "d", ...}; 

語法定義變量時只被允許,所以你可以做

std::string data[4] = {"a", "b", "c", "d"}; // syntax allowed for definition 

但行

data[0].x = {"a", "b", "c", "d", ...}; // not definition 

不是一個定義(data [0] .x不是新變量)。而且,由於這不是一個定義,所以實際上不能將這些代碼放在函數之外。

某處代碼你不得不手動分配每個變量(如@馬赫什的答案建議)

0

無法在C++中初始化非靜態數組成員。抱歉。

0

如果您使用這些char *而不是字符串,則可以使用靜態初始化程序。儘管如此,它會變得漫長而醜陋。

struct myStruct 
{ 
    char * x[22]; 
    char * y[8]; 
}; 

extern myStruct data[22]; 

myStruct data[22] = { 
    { // data[0] 
     { "a", "b", "c", ... "v" }, // data[0].x 
     { "0", "1", ... "7" } // data[0].y 
    }, 
    { // data[1] 
    ... 
}; 
0

其他評論是正確的,但我相信還有一件事你可以做。當你在頭文件中聲明它時,你可以初始化結構:

struct myStr 
{ 
    string x[22]; 
    string y[8]; 
} data[22] = { {...}, {...}, ... }; 

這也會很長很醜,但可能會解決你的問題。正如其他人所說的,你不能在實例化之後將其外部化並賦值給它。