2011-05-09 32 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] = { {...}, {...}, ... }; 

这也会很长很丑,但可能会解决你的问题。正如其他人所说的,你不能在实例化之后将其外部化并赋值给它。