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

标签 c++ opengl global-variables declaration structure

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

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/

相关文章:

c++ - 如何减少或消除通过更改 16 位 PCM 样本的 'volume' 所产生的噪音

c++ - 如何在现代 opengl 中正确实现四元数相机?

java - 我在哪里可以下载 JOGL?

c++ - 尝试使用 OpenGL 时出错

c++ - 标准输出静默失败

c++ - 简单教程示例的 CUDA 段错误

c++ - C++多态中,如何避免函数的名字隐藏(调用错误没有匹配的函数)?

javascript - 附加到回调函数时变量未定义(Javascript/Dojo)

C++:定义前注册全局变量

android - 尝试获取全局 ArrayList 时获取 NullPointer