Van*_*ath 0 c++ arrays struct dynamic
我的英语不是那么好,这就是为什么我的问题可能错了.但我有一个问题,我不知道如何解决它,或者甚至可能做到.
我定义了2个Structs:
typedef struct
{
UINT16 ScriptNumber;
std::string ScriptText;
} StepStruct;
typedef struct
{
std::string SequenceName;
std::string DisplayName;
StepStruct SequenceSteps;
} SequenceStruct;
Run Code Online (Sandbox Code Playgroud)
如您所见,第一个Struct是第二个结构的成员.所以我希望两种结构都是动态的.所以我从Type中创建了2个动态数组,从Type中创建了StepStruct1个动态数组SequenceStruct.
Type StepStructs的两个动态数组定义如下:
StepStruct gsFirstSkript[] =
{
{ 1 , "SkriptText One"},
{ 2 , "SkriptText Two"},
{ 45, "SkriptText Three"}
}
StepStruct gsSecondSkript[] =
{
{ 48, "SkriptText One"},
{ 2 , "SkriptText Two"},
{ 45, "SkriptText Three"}
}
Run Code Online (Sandbox Code Playgroud)
那些结构属于类型StepStruct.现在我想对一个SequenceStructType 做同样的事情,但我想在Struct Member下分配我已经拥有的两个Arrays SequenceSteps.我的意思是:
SequenceStruct gsSequenceList[] =
{
{ "FirstScript", "Test One", gsFirstSkript},
{ "SecondScript", "Test Two", gsSecondSkript}
}
Run Code Online (Sandbox Code Playgroud)
如果我现在想要读取成员gsSequenceList,我无法访问它的SequenceSteps索引下的任何信息!什么意思,数据不被复制!我用指针尝试了但没有成功.
UINT16 lTestVal = gsSequenceList[0].SequenceSteps[2].ScriptNumber;
Run Code Online (Sandbox Code Playgroud)
那么我可以管理这个有效吗,lTestVal包含45值?
typedef struct
{
std::string SequenceName;
std::string DisplayName;
StepStruct* SequenceSteps;
} SequenceStruct;
Run Code Online (Sandbox Code Playgroud)
这将允许代码编译并且您显示的测试片段将起作用.但是,这不会复制数据.如果你改变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}
}
Run Code Online (Sandbox Code Playgroud)