C++ C++;包含防护装置为;“忽略”;项目之间
我有两个项目;静态库和可执行文件(标准Win32设置,使用多线程调试dll设置)。 在我的图书馆里,我有一个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
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,谢谢各位。忘了这一点。不要在标题中定义它们。只声明它们。