这里的第一个问题,答案可能很简单,但我无法弄清楚。要点: 在我的项目中,我创建了两个类:“GlobalVairables”和“SDLFunctions”。 显然,在第一个中我想存储我可以在任何其他类中关联的全局变量,而在第二个中我使用这些全局变量获得了很少的函数。这是代码:
GlobalVariables.h
#pragma once
class GlobalVariables
{
public:
GlobalVariables(void);
~GlobalVariables(void);
const int SCREEN_WIDTH;
const int SCREEN_HEIGHT;
//The window we'll be rendering to
SDL_Window* gWindow;
//The surface contained by the window
SDL_Surface* gScreenSurface;
//The image we will load and show on the screen
SDL_Surface* gHelloWorld;
};
和GlobalVariables.cpp
#include "GlobalVariables.h"
GlobalVariables::GlobalVariables(void)
{
const int GlobalVairables::SCREEN_WIDTH = 640;
const int GlobalVariables::SCREEN_HEIGHT = 480;
SDL_Window GlobalVairables:: gWindow = NULL;
SDL_Surface GlobalVariables:: gScreenSurface = NULL;
SDL_Surface GlobalVariables:: gHelloWorld = NULL;
}
GlobalVariables::~GlobalVariables(void)
{
}
这里是SDLFunction.cpp中的一个函数,它使用“gWindow”和另外两个变量:
gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
我的问题是,在调试时,我得到了
error C2065: 'gWindow' : undeclared indentifier
当然,在SDLFunctions.cpp中我得到了“#include”GlobalVariables.h“”。而且,这些变量是公开的,所以不是这样(可能)。 有人能说出什么问题吗?有一些简单的解决方案,还是我必须重新组织它,不应该使用全局变量?请帮忙。
答案 0 :(得分:8)
首先,您的变量是该类的每个实例的成员,因此,通常意义上不是全局变量。您可能希望将它们声明为静态。更好的是,不要为它们创建一个类 - 而是将它们放入命名空间。像下面的内容(在.h文件中):
allsectornames = set( sec['sname'] for record in dataset['users'] for sec in record['sectors'] )
summarize = lambda record: record[ 'id' ] # customize this to return whatever details you want (even just return the whole record itself if you prefer)
result = [
{
'sname':sname,
'count':len(matches),
'matches':[ summarize( match ) for match in matches ]
}
for sname in allsectornames
for matches in [[
record for record in dataset['users'] if sname in [ sec['sname'] for sec in record['sectors'] ]
]]
]
print(result)
您可以通过以下方式在代码中引用它们:
namespace globals {
static const unsigned int SCREEN_WIDTH = 640;
static const unsigned int SCREEN_HEIGHT = 1024;
}