首先,我遇到问题的代码片段;
设置.h
namespace
{
int WINDOW_WIDTH;
int WINDOW_HEIGHT;
bool FULLSCREEN;
}
void settings_init();
设置.cpp
#include "DX_Constants.h"
void settings_init()
{
WINDOW_WIDTH = 1920;
WINDOW_HEIGHT = 1080;
FULLSCREEN = true;
}
main.cpp //只是重要的部分..我没有忘记winapi需要的其他部分
#include "settings.h"
int WINAPI WinMain(...)
{
settings_init();
if(//verifies values entered are seen here correctly ...NOTE triggers on != )
return false;
....code continues
}
我的问题:
以这种格式运行代码会触发 if 语句检查并关闭程序。
如果我删除命名空间匿名,我会得到变量的 LNK 2005 错误。
如果我简单地注释掉所有 settings.cpp 并将函数定义放入头文件中,我可以让代码运行,但这对我来说是一个简写。
我需要什么:显然对标头和辅助 .cpp 文件有更多的了解......并且可能是链接。我有几本书;kelly 的“2d 游戏编程”、harbour 的“beginning game programming”和 horton 的“visual C++ 2010”。有人可以指出一个地方的方向来更详细地了解我的问题,即让函数存在于 .cpp 中,而声明存在于标题中,或者推荐一本书来教我理解这些问题?
解决方案编辑:感谢 Mats Petersson(见评论)
代码的解决方案最终是;
- 删除匿名命名空间和括号。
- 在 settings.h 中的全局变量类型声明前应用 extern 前缀。
- 将普通的全局变量声明(例如 int window_width;)添加到 settings.cpp 文件中。