0
#include<iostream>
#include<string>
using namespace std;
int main(void) {

    struct STRCT {
        int num;
        string str1,
               arrStr1[],
               str2,
               arrStr2[];
    };

    int a;
    string b[2],
           c[3],
           d,
           e;

    a = 10;

    b[0] = "hello";
    b[1] = "world";

    c[0] = "stack";
    c[1] = "over";
    c[2] = "flow";

    d = "random";
    e = "text";

    //how do i intialize the arrays (arrStr1[] and arrStr2[]) in aStruct along with the rest of items?
    //is it like this?

    //i want aStruct[] to be an array and i want its size to be declared from the start to later be filled with vals

    STRCT aStruct[2];

    //then later in the program i want to assign aStruct[] vals

    aStruct[0] = {a,      //int
                  d,      //string
                  {b},    //string[]
                  e,      //string
                  {c}};   //string[]
}

所以基本上我想制作一个内部包含数组的结构数组,然后获取正确的 val,然后将正确的 val 分配给结构数组内的数组。非常感谢您的帮助

4

2 回答 2

3

结构中的数组声明完全是非法的。C++ 不支持将无大小数组声明作为类成员。即使某些 C++ 编译器支持 C99 风格的“struct hack”声明,也只允许一个大小较小的数组,并且该数组必须是结构的最后一个成员。

你想在你的结构中有数组——你必须给它们特定的编译时大小。如果没有特定的编译时间大小,您将不得不使用指针或std::vector.

在您的示例中,b有 size2并且c有 size 3。您可以声明具有相同大小的结构

struct STRCT {
  int num;
  string str1, arrStr1[2], str2, arrStr2[3];
};

然后初始化如下

STRCT aStruct[2] = 
{
  {
    a,
    d,
    { b[0], b[1] },
    e,
    { c[0], c[1], c[2] }
  }

  // The rest of the array is value-initialized
};

这只是普通数组所能达到的。如果您想要更灵活的东西,将数组直接嵌入到结构中将无济于事。要么手动构建必要的内存结构,要么使用std::vector.

于 2012-07-13T06:11:33.797 回答
0

在 C++ 中这是非法的

string arr[2] = {"This","is"};
string arr1[2];

arr1 = arr;

没有什么能比得上“将整个数组复制到另一个数组中”。数组元素必须单独复制。

其次,您不能声明大小未知的数组

您可以通过声明固定大小的字符串数组来修改结构声明并执行此操作

for(int i =0; i< 2; i++)
{

   aStruct[i].num = a;
   aStruct[i].str1= d;

   for(int j=0;j<2;j++)
   {
     arrStr1[i] = b[i];
   }

   aStruct[i].str2= e;

   for(int k=0;k<3;k++)
   {
     arrStr2[i] = c[i];
   }
}

我建议代替string arrStr1[],string arrStr2[]和使用b[2]std ::vector。这将帮助您避免在 for 循环中对条件进行硬编码。c[2]

于 2012-07-13T05:48:30.150 回答