我的英语不太好,这就是为什么我的问题可能错了。但我有一个问题,我不知道如何解决它,或者它是否可能做到。
我定义了2个Structs:
typedef struct
{
UINT16 ScriptNumber;
std::string ScriptText;
} StepStruct;
typedef struct
{
std::string SequenceName;
std::string DisplayName;
StepStruct SequenceSteps;
} SequenceStruct;
如您所见,第一个Struct是第二个结构的成员。所以我希望这两种结构都是动态的。所以我从类型StepStruct
创建了2个动态数组,从类型SequenceStruct
创建了1个动态数组。
Type StepStructs 的两个动态数组定义如下:
StepStruct gsFirstSkript[] =
{
{ 1 , "SkriptText One"},
{ 2 , "SkriptText Two"},
{ 45, "SkriptText Three"}
}
StepStruct gsSecondSkript[] =
{
{ 48, "SkriptText One"},
{ 2 , "SkriptText Two"},
{ 45, "SkriptText Three"}
}
结构的那些属于StepStruct
类型。现在我想使用SequenceStruct
类型执行相同操作,但我想在Struct Member SequenceSteps
下分配我已经拥有的两个数组。我的意思如下:
SequenceStruct gsSequenceList[] =
{
{ "FirstScript", "Test One", gsFirstSkript},
{ "SecondScript", "Test Two", gsSecondSkript}
}
如果我现在想要阅读会员 gsSequenceList ,我无法访问 SequenceSteps 索引下的任何信息!什么意思,数据不被复制!我用指针试了一下 但没有成功。
UINT16 lTestVal = gsSequenceList[0].SequenceSteps[2].ScriptNumber;
那么我可以判断这是否有效,并且lTestVal包含值45?
答案 0 :(得分:5)
typedef struct
{
std::string SequenceName;
std::string DisplayName;
StepStruct* SequenceSteps;
} SequenceStruct;
这将允许代码编译,并且您显示的测试片段将起作用。
但是,这不会复制数据。如果您更改gsFristSkript
,它也会在gsSequenceList中更改。如果要复制数据,可以明确地执行此操作,使用构造函数或仅使用向量<>。
这是带向量的解决方案:
#include <vector>
...
typedef struct{
std::string SequenceName;
std::string DisplayName;
vector<StepStruct> SequenceSteps;
} SequenceStruct;
vector<StepStruct> gsFirstSkript =
{
{ 1 , "SkriptText One"},
{ 2 , "SkriptText Two"},
{ 45, "SkriptText Three"}
}
vector<StepStruct> gsSecondSkript =
{
{ 48, "SkriptText One"},
{ 2 , "SkriptText Two"},
{ 45, "SkriptText Three"}
}
SequenceStruct gsSequenceList[] =
{
{ "FirstScript", "Test One", gsFirstSkript},
{ "SecondScript", "Test Two", gsSecondSkript}
}