struct中的String / char数组

时间:2011-05-09 21:35:30

标签: c++ visual-studio-2010

我正在尝试创建一个在其中包含多个字符串数组的结构。出于我的目的,我想使用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 *数组进行各种排列,但无济于事,我很困惑。我忘了一些基本的东西吗?

提前致谢。

6 个答案:

答案 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] = { {...}, {...}, ... };

这也是漫长而丑陋的,但可能会解决你的问题。正如其他人所说的那样,你不能在实例化之后将其分配给它并进行分配。