【问题标题】:How to include header in order?如何按顺序包含标题?
【发布时间】:2015-12-25 03:18:10
【问题描述】:

我有一个包含许多头文件的 OpenGL 项目。我使用 GLEW 库,我的 Main.cpp 是这样开始的:

// use GLEW as static lib requires GLEW_STATIC
#define GLEW_STATIC 
#include <GL/glew.h>
// ...

有报错:

GL/glew.h(85): fatal error C1189: #error:  gl.h included before glew.h

所以我需要在包含gl.h 的任何其他标头之前包含GL/glew.h。所以我在每个标题中添加了这些行:

#ifndef GLEW_INCLUDED
#define GLEW_STATIC
#include <GL/glew.h>
#define GLEW_INCLUDED
#endif

我必须修改每个标题,这似乎是一项“肮脏”的工作。有什么干净的方法可以做到这一点吗?

【问题讨论】:

    标签: c++ opengl include glew


    【解决方案1】:

    做到这一点的干净方法是锻炼自我控制。或者更重要的是,停止包含gl.h。如果您使用的是OpenGL loading library,那么它会控制您对 OpenGL 的访问。让它完成它的工作,只包含它的标题。

    所以不需要GLEW_INCLUDED

    至于GLEW_STATIC,这是您在命令行上添加到构建系统的定义,而不是添加到您使用的每个文件中。就像您没有定义 NDEBUG 或其他类似定义一样。

    【讨论】:

    • 我通过删除这些行恢复了标题。我发现有些标题包含glew.h,但没有一个包含gl.h。然后我将#define GLEW_STATIC #include &lt;GL\glew.h&gt; 添加到Main.cpp。仍然得到错误。我是不是搞错了?
    • @stanleyerror:我说在命令行中将GLEW_STATIC 放入您的构建系统,而不是main。如果您使用的是 makefile,则将其添加到编译器的命令行开关中。如果您使用的是 Visual Studio,那么您的项目中有一个定义设置(调试和发布)。我不能告诉你如何使用你的构建工具,但这就是你放置它的地方。
    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多