将Dynamic Struct Array复制到另一个C++中

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值?

Sor*_*rin 5

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)