C++ 从包含中定义打破以前的其他包含
我正在尝试调试项目主文件的include。这是我的包含代码C++ 从包含中定义打破以前的其他包含,c++,c-preprocessor,C++,C Preprocessor,我正在尝试调试项目主文件的include。这是我的包含代码 //Gameplay #include "gameplay.h" //LibNoise #include <noise/noise.h> //Console Window #ifndef _WINDOWS_ #define WIN32_LEAN_AND_MEAN #include <windows.h> #undef KEY_EVENT #undef MOUSE_EVENT #
//Gameplay
#include "gameplay.h"
//LibNoise
#include <noise/noise.h>
//Console Window
#ifndef _WINDOWS_
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef KEY_EVENT
#undef MOUSE_EVENT
#endif
#include <io.h>
#include <fcntl.h>
//RakNet
#include "MessageIdentifiers.h"
#include "RakPeerInterface.h"
#include "BitStream.h"
#include "RakNetTypes.h"
//My Includes
#include "Island.h"
下面是ScriptController.h中有问题的代码行
762| enum ScriptCallback
763| {
764| INITIALIZE = 0,
...
768| RESIZE_EVENT,
769| KEY_EVENT,
770| MOUSE_EVENT,
771| TOUCH_EVENT,
...
775| GAMEPAD_EVENT,
776| CALLBACK_COUNT,
777| INVALID_CALLBACK = CALLBACK_COUNT
778| };
...
1024| std::vector<std::string> _callbacks[CALLBACK_COUNT];
762 |枚举脚本回调
763| {
764 |初始化=0,
...
768 |调整大小|事件,
769 |关键事件,
770 |鼠标|事件,
771 |触碰|事件,
...
775 | GAMEPAD_活动,
776 |回调|计数,
777 |无效的_回调=回调_计数
778| };
...
1024 | std::vector _回调[回调计数];
为了避免与windows.h
定义冲突,我建议您制作自己的头文件:
windows.h
的任何宏,例如WIN32\u LEAN\u和\u MEAN
#是否包括
,以及#是否包括
#undef
然后确保可能遇到Windows include的每个源文件都包含此头文件。您可能可以使用编译器功能将标题注入所有单元。
我在编译过程中出错
然后发布错误!呜呜,我会在30分钟后回家。如果枚举本身是在windows.h
之前定义的,那么它显然不能破坏枚举本身,因为KEY\u EVENT
和MOUSE\u EVENT
尚未定义。但是,在包含了windows.h
之后,如果不使用#unde
语句,任何对enum的使用都会中断,这应该可以很好地处理问题。因此我不得不认为,在定义枚举之前,windows.h
很可能比您想象的更早被包括进来。为什么不先在顶部包含windows.h
,然后在顶部包含#unde
,然后根据需要包含其余的文件?因为无论我将gameplay.h按顺序移动到哪里,我仍然会遇到问题。我不知道为什么。啊,发现了问题。我更仔细地观察了编译过程,意识到它实际上在编译完这个文件之后就停止了。该文件包括RakNet,其中包括windows.h,之后包括gameplay.h,这导致了问题。我认为我疯了,因为所有这些都是正确的,它仍然给我错误,但它甚至不在这里。谢谢大家的帮助。
762| enum ScriptCallback
763| {
764| INITIALIZE = 0,
...
768| RESIZE_EVENT,
769| KEY_EVENT,
770| MOUSE_EVENT,
771| TOUCH_EVENT,
...
775| GAMEPAD_EVENT,
776| CALLBACK_COUNT,
777| INVALID_CALLBACK = CALLBACK_COUNT
778| };
...
1024| std::vector<std::string> _callbacks[CALLBACK_COUNT];