gpt4 book ai didi

c++ - 命名空间、类和编译器顺序

转载 作者:行者123 更新时间:2023-11-28 06:15:57 25 4
gpt4 key购买 nike

我正在使用 OpenGL,我构建并编辑了一个 Vector3 header ,它与结构 Vector3 完美配合,但是当我尝试创建一个 Vector3 zero = Vector3(0 ,0,0) 变量,由于编译顺序,编译器不允许我构建,所以我从 Internet 复制了一个新的 Vector3 库,但出现此错误:"Vector3 does not name a type"。我想是编译顺序的原因,我将分享我得到错误的地方和库。首先这是我正在使用的 2 个文件 http://leetnightshade.com/c-vector3-class我只使用了 Vector3.cpp 和 Vector3.h,这段代码是我编写的,也是我收到错误的地方(这是一个由名为 GameObject.h 的 main.cpp 文件调用的头文件):

#include "Vector3.h"

GLfloat cube[] =
{
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};

GLfloat Space3D_X[] =
{
0.0f, 0.0f, -100,
0.0f, 0.0f, 100
};

GLfloat Space3D_Y[] =
{
-100.0f, 0.0f, 0.0f,
100.0f, 0.0f, 0.0f
};

typedef struct GameObject
{
int ID, parent;
Vector3 position; ///<<<--------------------------HERE I GET THE ERROR VECTOR3 DOES NOT NAME A TYPE
Quaternion rotation;
};

struct GameObject GameObjects[65536];

class Natives
{
public:
int GameObjectsCount = 0;
inline int CreateCube (Vector3 _position, Quaternion _rotation, int _parent)
{
GameObjects[GameObjectsCount].ID = GameObjectsCount;
GameObjects[GameObjectsCount].parent = _parent;
GameObjects[GameObjectsCount].position = _position;
GameObjects[GameObjectsCount].rotation = _rotation;
GameObjectsCount ++;
return GameObjectsCount-1;
}
inline void SetGameObjectParent (int _gameObject, int _parent)
{
Vector3 _tempPos = GameObjects[_gameObject].position;
Quaternion _tempRot = GameObjects[_gameObject].rotation;
GameObjects[_gameObject].parent = _parent; /*** ATTACH GM TO OTHER GM WITHOUT CHANGE POSITION ***/
GameObjects[_gameObject].position.x = -(GameObjects[_parent].position.x - _tempPos.x); /*** IF YOU WANT TO ATTACH IT CHAING POSITION JUST ***/
GameObjects[_gameObject].position.z = -(GameObjects[_parent].position.z - _tempPos.z); /*** OVERWRITE THE PARENT WITH OOP SYNTAX ***/
GameObjects[_gameObject].rotation.rx = _tempRot.rx;
GameObjects[_gameObject].rotation.ry = _tempRot.ry;
GameObjects[_gameObject].rotation.rz = _tempRot.rz;
}
};

Natives native;

关注 struct GameObject 的 4 行,这是我在 Vector3 位置出现错误的地方;线。我想我正确地解释了自己。看不懂我做了个方案http://gyazo.com/77189bef5576b047de5271f1b7d2d881 .感谢阅读。

最佳答案

您链接的 Vector3 库使用命名空间 _Warp,因此您应该这样使用它:

_Warp::Vector3 position;

PS: 警惕任何使用保留名称作为标识符的第三方库,因为作者可能不知道他们在做什么。 _Warp 是编译器的保留名称(它以 _ 加上大写字母开头),不应由库或程序代码使用。

关于c++ - 命名空间、类和编译器顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30310377/

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