如何在c++; 我在C++中有向量问题。我是C++新手,请记住这个问题。< /P>

如何在c++; 我在C++中有向量问题。我是C++新手,请记住这个问题。< /P>,c++,vector,struct,C++,Vector,Struct,因此,在我的程序开始时,我有以下结构: 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; };

因此,在我的程序开始时,我有以下结构:

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;
<> P>在主体的中间,我尝试使用:

grupo->vertices.push_back(x);
但它一直在破坏程序。我正在使用VisualStudio,并使用调试模式。我可以看到,当把X推到崩溃的向量时(X有一个值)。我尝试将向量更改为浮点数组。所以我能想象的问题是向量的初始化。。。你能帮我做点什么吗


因为你使用C++,所以

< P>如果要动态创建
grupo
,应使用
new
运算符和构造函数:

grupo = new grupo();

<代码> Malc 没有正确初始化C++对象,如<代码> STD::vector < /C> > /<



S。我不确定什么是<代码> GROPO-> MODMOS//COD>和GRUPO > GRUPOS应该是,但是我会用合适的C++类型(也许是代码> MODES/<代码>应该是代码> STD::String 等)。另外,我怀疑你有一个代码< >代码>太多,对于代码<> MODES和 GRUPOS

< p>你使用C++,除非特殊原因,你不需要“新”或Malc关键字。结构不需要typedef

我不确定您的字符**应该是什么,但您可以使用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;
};

<> P> >我建议您多读一些关于C++语言的内容,以及它不是C.< /P> < P> C++,不需要声明中的Type。 要正确初始化结构,您应该编写一个ctor来替换编译器提供的ctor(它通常不执行任何操作)

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


这个问题与[c]无关,所以请不要给它加标签。@AnttiHaapala你是对的,对此很抱歉。我发现变量与结构同名非常令人困惑。另外,请尝试完全去掉指针和
malloc()
。试着用
std::vector
或其他stl容器来完成这一切。这是有效的:D只是想知道,这是否会使我的结构上的所有浮点和整数的默认值为0?或者我应该在结构中强制使用它来生成它们吗?您应该阅读有关构造函数的内容,并且在不需要时不应该使用指针。否pods没有默认值(int,chars..),除非您指定它。char**?-我很少用它。只有一个例外。“int main(int argv,char*argv[]);”,可以写成“int main(int argv,char**argv);”
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( ... );
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;
grupo grupo1(1.0, 2.0, 3, 4);
grupo grupo2(3.0, 4.0, 5, 6);
// etc.