以下insert
是否有效?我的问题的原因是身体中有另一个结构,其中还有另一个结构(数组)。所有变量a
,b
,c
,x
,y
和z
都是次要的,只是支持我的问题。
提前致谢。
struct S_A
{
int a;
float b;
char c;
// ...
S_B my_double_nested_structure;
};
struct S_B
{
int x;
float y;
char z;
// .. .
char array1[2];
};
typedef std::map<int, S_A> myAMapType;
S_A nestedStruct;
nestedStruct.a = 5;
nestedStruct.b = 5.9;
nestedStruct.c = 'A';
nestedStruct.my_double_nested_structure.x = 4;
nestedStruct.my_double_nested_structure.y = 8.9;
nestedStruct.my_double_nested_structure.z = 'B';
nestedStruct.my_double_nested_structure.array1[0] = 'B';
nestedStruct.my_double_nested_structure.array1[1] = 'C';
main()
{
myAMapType finalMap;
finalMap.insert(std::pair<int, S_A>(3, nestedStruct);
}
答案 0 :(得分:2)
如果在struct S_B
之前定义struct S_A
,您的代码将编译并运行,因为您将S_B类型的成员对象置于S_A定义,这意味着必须在该点定义完整类型S_B(如果它只是指向对象的指针然后不完整的类型就足够了。
你必须提出作业
nestedStruct.a = 5;
nestedStruct.b = 5.9;
nestedStruct.c = 'A';
nestedStruct.my_double_nested_structure.x =4;
nestedStruct.my_double_nested_structure.y =8.9;
nestedStruct.my_double_nested_structure.z ='B';
nestedStruct.my_double_nested_structure.array1[0] ='B';
nestedStruct.my_double_nested_structure.array1[1] ='C';
进入一些功能。在全局范围内只允许声明/定义(不是表达式语句等)。
在全局范围内,您可以使用结构的初始化列表:
S_A nestedStruct = { 5, 5.9, 'A', { 4, 8.9, 'B', { 'B', 'C' } } };
对于没有显式构造函数(如结构)的类以及此类的数组或简单类型的数组,允许使用初始化列表。
答案 1 :(得分:1)
是。只要没有指针,这就被编译成一个可以复制的整体对象(例如,复制到容器中)。
由于前向引用S_B,缺少括号等,
还会导致您的代码无法编译
答案 2 :(得分:0)
这种方法有效(除了代码中的拼写错误等)。原因如下:
映射复制 - 将您的案例S_A中复制的对象构造到其内部数据中。此外,S_A还有一个默认的(自动生成的)复制构造函数,它逐个复制所有字段,并调用S_B的复制构造函数来复制字段my_double_nested_structure
。它还有一个默认的复制构造函数 - 按顺序 - 复制其所有字段。
因此,在插入过程中,所有数据都会正确复制到地图中。
请记住,如果这些结构有任何指针,那么指针本身将被复制 - 而不是它们指向的对象。
答案 3 :(得分:0)
正如其他人所说,代码应该有效,除了错别字。通常我会使用[]
- 运算符插入地图,例如finalMap[3]=nestedStruct
。