Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ #包括<;windows.h>;导致许多语法错误_C++_Windows_Qt_Opengl - Fatal编程技术网

C++ #包括<;windows.h>;导致许多语法错误

C++ #包括<;windows.h>;导致许多语法错误,c++,windows,qt,opengl,C++,Windows,Qt,Opengl,我的程序使用Qt和OpenGL。它可以在Linux和Mac下正确编译。 在windows上编译时,我需要#包括windows.h以使用OpenGL,代码如下: #if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64) #include <windows.h> #endif #ifdef __APPLE__ #include <OpenGL/glu.h> #include <G

我的程序使用Qt和OpenGL。它可以在Linux和Mac下正确编译。 在windows上编译时,我需要#包括windows.h以使用OpenGL,代码如下:

#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(WIN64)
#include <windows.h>
#endif
#ifdef __APPLE__
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
#else
#include <GL/glu.h>
#include <GL/glut.h>
#endif
如果我不包括windows.h,那么这些错误就不会出现。
我正在将VS2013与Qt 5.3一起使用。

windows.h
用大量错误、矩形

解决这个问题的一种方法是自己声明所需的函数(我想这不是太复杂的工作,因为您不需要超过10个函数)。您可以调用include文件
wgl.h
或其他什么

__declspec(dllimport) void* __stdcall wglCreateContext(void* hdc);
//... Other functions you need

OpenGL API是在
windows.h
之外定义的,因此没有问题

windows.h
用大量错误、矩形

解决这个问题的一种方法是自己声明所需的函数(我想这不是太复杂的工作,因为您不需要超过10个函数)。您可以调用include文件
wgl.h
或其他什么

__declspec(dllimport) void* __stdcall wglCreateContext(void* hdc);
//... Other functions you need
OpenGL API是在
windows.h
之外定义的,因此微软windows上的OpenGL与WGL绑定,WGL又与GDI绑定。 因此,如果不首先包含一些定义GDI/Windows预处理器令牌的特定于Windows的头,例如
wingdipi
apitery
,就不能
#include
(通过包含
间接实现此目的)。但这实际上是Windows上的任何OpenGL程序与任何特定于Windows的程序绑定的程度(按页眉)

WinDef.h
定义了
apitery
WinGDI.h
定义了
wingdipi
——包括
Windows.h
会带来这两个标题(以及许多其他垃圾)。因此,包括
Windows.h
主要是一种方便;要想在Windows上编译OpenGL软件,您应该
#include
,然后是
#include
,最后是
#include

或者,您可以在
#include
之前定义WIN32_LEAN_并_MEAN,它将通过包含该标题显著减少引入的不相关内容的数量。许多VisualC++项目实际上在创建它们时默认地定义了预处理器定义,您可能想查看项目是否配置为这样。微软Windows上的“/P>”OpenGL与WGL绑定,WGL又与GDI绑定。 因此,如果不首先包含一些定义GDI/Windows预处理器令牌的特定于Windows的头,例如
wingdipi
apitery
,就不能
#include
(通过包含
间接实现此目的)。但这实际上是Windows上的任何OpenGL程序与任何特定于Windows的程序绑定的程度(按页眉)

WinDef.h
定义了
apitery
WinGDI.h
定义了
wingdipi
——包括
Windows.h
会带来这两个标题(以及许多其他垃圾)。因此,包括
Windows.h
主要是一种方便;要想在Windows上编译OpenGL软件,您应该
#include
,然后是
#include
,最后是
#include


或者,您可以在
#include
之前定义WIN32_LEAN_并_MEAN,它将通过包含该标题显著减少引入的不相关内容的数量。许多VisualC++项目实际上在首次创建时默认定义了预处理器定义,您可能想查看项目是否配置为这样。

可能是相关的:如果您需要在GL中插入,为什么不只是<代码> >包含< /代码>?还请注意,GL!=过量。我试过了,如果定义NOMINMAX,包括,否则,定义NOMINMAX,包括,取消定义NOMINMAX,如果在,问题仍然存在,我的程序使用了一些过量函数,这就是为什么我包括了过量。h@peppe:
#include
间接包括
。我认为依靠这一点是不好的,但这正是OP目前摆脱困境的方式。此外,还有一些GLUT函数与上下文管理无关,因此它有时对我们Qt和GLUT一起使用是有意义的。我猜这里就是这种情况。可能是相关的:如果你需要拉总账,为什么不把它包括进去呢?还请注意,GL!=过量。我试过了,如果定义NOMINMAX,包括,否则,定义NOMINMAX,包括,取消定义NOMINMAX,如果在,问题仍然存在,我的程序使用了一些过量函数,这就是为什么我包括了过量。h@peppe:
#include
间接包括
。我认为依靠这一点是不好的,但这正是OP目前摆脱困境的方式。此外,还有一些GLUT函数与上下文管理无关,因此它有时对我们Qt和GLUT一起使用是有意义的。我猜这里就是这种情况。#定义WIN32#LEAN#和#你的意思是在#包含解决我的问题之前。我还需要#在包含之前包含#在包含之前包含,否则它会说“退出”功能的定义存在冲突,是的。第二个问题记录在关于堆栈溢出的其他几个问题中,显然是在VisualStudio2005(8.0)前后出现的,但是由于GLUT从未更新,所以您必须自己解决它。谢谢。我不能让glfw、glew和ENet一起玩得很好。。。最后发现这是因为ENet需要windows.h,这会根据包含顺序影响glfw。。。但不知道如何避免包含它。设置WIN32\u LEAN\u和\u MEAN,然后包括windows.h、enet、glew和glfw,最后成功了。FWIW,我在一些例子中得到了“error:expected identifier or'('before numeric constant)”