0

首先,我遇到问题的代码片段;

设置.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
}

我的问题:

  1. 以这种格式运行代码会触发 if 语句检查并关闭程序。

  2. 如果我删除命名空间匿名,我会得到变量的 LNK 2005 错误。

  3. 如果我简单地注释掉所有 settings.cpp 并将函数定义放入头文件中,我可以让代码运行,但这对我来说是一个简写。

我需要什么:显然对标头和辅助 .cpp 文件有更多的了解......并且可能是链接。我有几本书;kelly 的“2d 游戏编程”、harbour 的“beginning game programming”和 horton 的“visual C++ 2010”。有人可以指出一个地方的方向来更详细地了解我的问题,即让函数存在于 .cpp 中,而声明存在于标题中,或者推荐一本书来教我理解这些问题?

解决方案编辑:感谢 Mats Petersson(见评论)

代码的解决方案最终是;

  1. 删除匿名命名空间和括号。
  2. 在 settings.h 中的全局变量类型声明前应用 extern 前缀。
  3. 将普通的全局变量声明(例如 int window_width;)添加到 settings.cpp 文件中。
4

1 回答 1

0

名称WINDOW_HEIGHTWINDOW_WIDTH可能在 Windows 环境中用作宏或其他名称。使用全是大写名称的变量通常不是一个好主意,因为这是宏的约定,因此与某些头文件中定义的某些宏意外冲突的可能性很大,您甚至不知道它被包含在内更大。

我建议您更改变量的名称,以免它们发生冲突 - 简单的方法是使用小写名称,window_heightandwindow_width等。

于 2013-04-13T22:51:07.997 回答