gpt4 book ai didi

c++ - 在 C++ 中的头文件中声明全局结构

转载 作者:太空宇宙 更新时间:2023-11-04 15:07:11 24 4
gpt4 key购买 nike

我在头文件中创建了一个结构如下:

typedef struct
{
GLfloat lgtR, lgtG, lgtB, lgtA;
GLfloat x, y, z;
bool islight;
GLfloat width, height, depth;
GLenum lightn;
particle prt;
int maxprt;
} emitter;

没有问题。

但是,在那个特定的头文件中,我想声明一个全局发射器,我可以在所有函数中使用它,它不是主源文件的一部分:

// header.h global declaration

emmiter currentEmit;

GLvoid glSetEmitter(emitter emitter)
{
currentEmit = emitter;
}

但是,当我尝试这样做时,我得到了很多“错误 C2228:'.variable' 的左边必须有类/结构/union ,所以我假设它根本没有在这里声明我的结构。

有没有办法在头文件中全局声明该结构,如果有,是否还有办法避免它也成为其他 .cpp 文件的一部分?

最佳答案

emitteremmiter 不同。

此外,由于这是 C++ - 只需直接编写 struct {};,不需要 typedef

你的整个标题是错误的,如果包含在多个翻译单元中,将给出多个定义:

// header.h global declaration
extern emitter currentEmit; // <-- note extern

inline GLvoid glSetEmitter(emitter emitter) // <-- note inline
{
currentEmit = emitter;
}

currentEmit 需要在单个实现文件中定义,而不是 header 。该函数需要内联,因此并非由所有 TU 定义。

最后一件事:通过 const 引用传递参数:

inline GLvoid glSetEmitter(const emitter& emitter)  // <-- note inline
{
currentEmit = emitter;
}

否则将创建一个不必要的拷贝。

关于c++ - 在 C++ 中的头文件中声明全局结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436914/

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