我正在尝试创建一个在其中包含多个字符串数组的结构。出于我的目的,我想使用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 *数组进行各种排列,但无济于事,我很困惑。我忘了一些基本的东西吗?
提前致谢。
答案 0 :(得分:0)
myStruct data[22];
使用上面的语句,您已经创建了类型为myStruct
的 22 对象,并且每个对象都有自己的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.
答案 1 :(得分: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不是新变量)。此外,由于这不是定义,因此您无法将此代码放在函数之外。
在代码的某处,您将不得不手动分配每个变量(如@ Mahesh的答案所示)
答案 2 :(得分:0)
您不能使用{}数组初始化语法为数组赋值。它只能在定义后立即初始化数组时使用:
int a[3] = { 3, 4, 5 };
但不是
int a[3];
a = { 3, 4, 5 }; //error
你不会绕过每个成员的循环或手动初始化。但我认为新的C ++ 0x标准对此有所改进,并使这个(甚至更多的初始化语法)成为可能。
答案 3 :(得分:0)
无法在C ++中初始化非静态数组成员。遗憾。
答案 4 :(得分: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]
...
};
答案 5 :(得分:0)
其他评论是正确的,但我相信还有另外一件事你可以做。您可以在标题中声明结构时初始化结构:
struct myStr
{
string x[22];
string y[8];
} data[22] = { {...}, {...}, ... };
这也是漫长而丑陋的,但可能会解决你的问题。正如其他人所说的那样,你不能在实例化之后将其分配给它并进行分配。