C++ C++;包含防护装置为;“忽略”;项目之间

C++ C++;包含防护装置为;“忽略”;项目之间,c++,visual-studio-2010,include,static-libraries,C++,Visual Studio 2010,Include,Static Libraries,我有两个项目;静态库和可执行文件(标准Win32设置,使用多线程调试dll设置)。 在我的图书馆里,我有一个Globals.h,代码如下: #ifndef _GLOBALS_H #define _GLOBALS_H #include <SDL.h> #include <string> namespace Eng { bool Run = true; SDL_Window *Window = NULL; SDL_GLContext GlCont

我有两个项目;静态库和可执行文件(标准Win32设置,使用多线程调试dll设置)。 在我的图书馆里,我有一个
Globals.h
,代码如下:

#ifndef _GLOBALS_H
#define _GLOBALS_H

#include <SDL.h>
#include <string>

namespace Eng
{
    bool Run = true;

    SDL_Window *Window = NULL;
    SDL_GLContext GlContext;

    Uint32 WindowFlags = SDL_WINDOW_OPENGL;
}

#endif
\ifndef\u GLOBALS\u H
#定义_GLOBALS_H
#包括
#包括
名称空间引擎
{
bool Run=true;
SDL_Window*Window=NULL;
SDL_GLContext GLContext;
Uint32 WindowFlags=SDL\u WINDOW\u OPENGL;
}
#恩迪夫
这一切都很好,而且在这个项目中一切都很好。但是,只要我将该文件包含在可执行项目中的多个文件中(所有文件都受包含保护),我就开始得到
Globals.h
中每个变量的多重定义符号错误

此外,我还从
math.h
m_PI macro redefinition
)收到了不少宏重新定义警告。我不确定这是否有关联,但这似乎是由于类似的错误性质(在一个项目中定义的防护似乎不适用于另一个项目)


有人知道如何解决这个问题吗?我觉得我遗漏了一些至关重要的编译器设置:(

简单。不要将定义放在标题中。包含保护解决了一个完全不同的问题。通过定义,你是指变量的赋值吗?’因为我刚刚想到了:/如果不是,你还打算如何定义全局变量?将变量声明为
extern
,并在
.cpp
文件中定义它们。Awesome,谢谢各位。忘了这一点。不要在标题中定义它们。只声明它们。