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

How to initialize a vector in a struct in c++

本文关键字:结构 向量 初始化 c++      更新时间:2023-10-16

我在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;

我只是这样开始主要的:

grupo = (struct grupo*)malloc(sizeof(struct grupo));
grupo->modelos = (char **)malloc(sizeof(1));
grupo->grupos = (struct grupo **)malloc(sizeof(struct grupo));

在正文的中间,我尝试使用这个:

grupo->vertices.push_back(x);

但它不断破坏程序。我正在使用visualstudio,并使用调试模式。我可以看到,当把X推到崩溃的向量上时(X有一个值)。我试着把向量改成一个浮点数组。所以我可以想象的问题是向量的初始化。。。你能帮我解决我缺少的东西吗?

谢谢:)

您使用的是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;
};

主要:

Grupo grupo;
grupo.vertices.push_back( ... );

然后我建议你多读一点关于C++语言到底是什么以及它如何不是C.

由于您使用的是C++;如果要动态创建grupo,则应使用new运算符和构造函数:

grupo = new grupo();

CCD_ 3不能正确地初始化诸如CCD_ 4之类的C++对象。


附言:我不确定grupo->modelosgrupo->grupos应该是什么,但我会为它们使用适当的C++类型(也许modelos应该是std::string,等等)。此外,我怀疑对于modelosgrupos来说,一个*太多了。

C++在声明中不需要typedef。

要正确初始化结构,应该编写一个ctor来替换编译器提供的ctor(它通常什么都不做)。

类似以下内容(只有几个属性):

struct grupo
{
   float transX, transY;
   // ...
   int nNomes;
   int nGrupos;
   std::vector<float> vertices;
   // I prefer initialization list form
   grupo() : transX(0.0),
             transY(1.0),
             // ...
             nNomes(0),
             nGrupos(0)
             // vertices default ctor is ok, creates empty vector
      {
         // use vertices.push_back(...); to fill vertices
      }
};
grupo grupo;

接下来,您将希望编写一个更有用的ctor,其中包含要使用的参数(而不是文字常量),这样您就可以构建多个grupo。

grupo grupo1(1.0, 2.0, 3, 4);
grupo grupo2(3.0, 4.0, 5, 6);
// etc.