[英]initializing string arrays within structs
#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[]
}
所以基本上我想用内部数组制作一个结构数组,然后获取适当的值,然后将适当的值分配给该结构数组内的数组。 提前非常感谢您的帮助
结构中的数组声明完全是非法的。 C ++不支持无尺寸数组声明作为类成员。 即使某些C ++编译器支持C99样式的“ struct hack”声明,也只允许一个较小的数组,并且该数组必须是struct的最后一个成员。
您想在结构中包含数组-您必须给它们指定特定的编译时大小。 如果没有特定的编译时间大小,则必须使用指针或std::vector
。
在您的示例中, b
大小为2
, c
大小为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
。
在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]
和c[2]
利用的std ::矢量 。 这将帮助您避免硬编码for循环中的条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.