我在头文件中创建了一个结构如下:
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 文件的一部分?
最佳答案
emitter
与 emmiter
不同。
此外,由于这是 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/