如何在c ++中初始化结构中的向量

Pet*_* L. 5 c++ struct vector

我在c ++中遇到了矢量问题.我是c ++的新手,所以请记住这一点.

所以我在我的程序开始时有以下结构:

typedef struct grupo
{
    float transX, transY, transZ, rotX, rotY, rotZ, rotAngle, scaleX, scaleY, scaleZ;
    char **modelos;
    struct grupo** grupos;
    int nNomes = 0, nGrupos=0;
    std::vector<float> vertices;
};

struct grupo *grupo;
Run Code Online (Sandbox Code Playgroud)

而我只是这样开始主要:

grupo = (struct grupo*)malloc(sizeof(struct grupo));
grupo->modelos = (char **)malloc(sizeof(1));
grupo->grupos = (struct grupo **)malloc(sizeof(struct grupo));
Run Code Online (Sandbox Code Playgroud)

在主要的中间我试图使用这个:

grupo->vertices.push_back(x);
Run Code Online (Sandbox Code Playgroud)

但它一直在破坏程序.我正在使用visual studio,并使用调试模式.我可以看到将X推送到崩溃的向量时(x有一个值).我试图将矢量更改为浮点数组.所以我能想象的问题是矢量的初始化......你能帮我解决一下我错过了什么吗?

谢谢 :)

Nik*_*kko 6

您使用的是C++,除非出于特定原因,否则不需要"new"或malloc关键字.结构域不需要typedef.

我不确定你的char**应该是什么,但你可以使用std :: string作为字符串.

也许你想要做的是这样的:

struct Grupo
{
    float transX, transY, transZ, rotX, rotY, rotZ, rotAngle, scaleX, scaleY, scaleZ;
    std::string modelos;
    int nNomes = 0, nGrupos=0;
    std::vector<float> vertices;
};
Run Code Online (Sandbox Code Playgroud)

主要:

Grupo grupo;
grupo.vertices.push_back( ... );
Run Code Online (Sandbox Code Playgroud)

然后我建议你多读一些关于什么是C++语言以及它不是C的语言.


Ant*_*ala 5

因为你正在使用C++; 如果要grupo动态创建,则应使用new运算符和构造函数:

grupo = new grupo();
Run Code Online (Sandbox Code Playgroud)

malloc没有正确初始化C++对象,如std::vector.


PS我不知道是什么grupo->modelosgrupo->grupos应该是,但我会用正确的C++类型为他们(或许modelos应该是std::string,等).另外,我怀疑你和*两个人都有太多.modelosgrupos