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

新手上路,请多包涵

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

在 main 的中间,我正在尝试使用它:

 grupo->vertices.push_back(x);

但它不断使程序崩溃。我正在使用 Visual Studio,并使用调试模式。我可以看到这是将 X 推到崩溃的向量时(x 有一个值)。我试图将向量更改为浮点数组。所以我能想象的问题是向量的初始化……你能帮我解决我错过的问题吗?

谢谢 :)

原文由 Peter L. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 690
2 个回答

由于您使用的是 C++;如果你想动态创建一个 grupo ,你应该使用 new 操作符,构造函数:

 grupo = new grupo();

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


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

原文由 Antti Haapala – Слава Україні 发布,翻译遵循 CC BY-SA 3.0 许可协议

您正在使用 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 的内容。

原文由 Nikko 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏