gpt4 book ai didi

c++ - 一个类使用第二个类,第二个类使用第一个类中定义的结构

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:01 25 4
gpt4 key购买 nike

我正在尝试用骨骼制作模型。它加载一个 .obj 文件来创建网格,并使用面组来定义每个“骨骼”或模型的一部分。

我有一个模型类。在头文件中,我定义了一个名为 Vertex 的公共(public)结构体,它存储模型中每个顶点的位置和法线方向等数据。

我还有一个 Bone 类,它有指向 Vertex 结构的指针 vector (#include < vector >),它看起来像这样:
std::vector< Model::Vertex* > vertices;

Model 类中会有骨骼,所以我在标题中添加了#included Bone同样,Bone 类需要知道 Vertex 是什么,所以我在其标题中添加了#included Model。
这给出了 Bone 的类型重新定义错误,所以我将 #pragma once 放在 Bone header 的顶部,但现在我的问题是我得到了与上面显示的代码行相关的四个编译错误。
前两个是:error C2653: 'Model' : is not a class or namespace name
后两个是:error C2065: 'Vertex' : undeclared identifier

不过,我确信这行代码在语法上没有任何错误。如果我不在 Model 类中#include Bone,它工作得很好。

有人知道如何解决此类问题吗?和/或是否有更好的方法来做到这一点?

编辑:我把class Bone;在前向减速模型的标题中,但在模型标题的私有(private)部分中,我有 Bone forearm;这给出了前臂使用未定义类“骨骼”的错误。
我不确定我是否可以颠倒类的顺序,例如:http://www.parashift.com/c%2B%2B-faq-lite/misc-technical-issues.html#faq-39.14 ,因为 Bone 需要一个指向 Model::Vertex 的指针,而不是 Model 本身。

最佳答案

I have put class Bone; in the header of Model for forward declaration, but in the private: section of the Model header, I have Bone forearm; which gives an error that forearm uses an undefined class 'Bone'.

通常前向声明用于指针/引用类型。 前臂 属于骨骼 类型。因此,要实例化 forearm,它应该看到 Bone 的完整类定义。仅前向声明是不够的。

// Model.h
class Bone; // Forward declaration
class Model{
Bone *forearm; // or Bone& forearm;
// .....
};

// Model.cpp
#include "Bone.h"
#include "Model.h" // This inclusion order doesn't matter.

// ....

或者您始终确保在每个包含 Model.h 的源文件中,Bone.h 包含在 Model.h 之前。这样,编译器前瞻性方法就不会失败。

关于c++ - 一个类使用第二个类,第二个类使用第一个类中定义的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com