c++ - 全局变量类 c++

标签 c++ sdl

这里的第一个问题,答案可能很简单,但我想不通。关键点: 在我的项目中,我创建了 2 个类:“GlobalVairables”和“SDLFunctions”。 显然,在第一个中我想存储我可以在任何其他类中关联的全局变量,在第二个中我使用这些全局变量的函数很少。这是代码:

全局变量.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”和其他 2 个变量:

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””。此外,这些变量是公开的,所以不是这个(可能)。 有人能告诉我出了什么问题吗?是否有一些简单的解决方案,或者我是否必须重新组织它,并且不应该使用全局变量?请帮忙。

最佳答案

首先,您的变量是类的每个实例的成员,因此,不是通常意义上的全局变量。您可能希望将它们声明为静态的。更好的是,根本不要为它们创建类——而是将它们放入命名空间。类似于以下内容(在您的 .h 文件中):

namespace globals {
   static const unsigned int SCREEN_WIDTH = 640;
   static const unsigned int SCREEN_HEIGHT = 1024; 
}

您可以通过以下方式在您的代码中引用它们:

int dot = globals::SCREEN_WIDTH;

关于c++ - 全局变量类 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275366/

相关文章:

c++ - 为什么顶点数组对象会导致错误?

c++ - 如何使用 OpenGL/SDL 让我的鼠标像 FPS 一样控制相机?

c++ - 带有单元测试的示例 C++ 项目

c++ - 使用 std::multimap 迭代器创建 std::list

c++ - boost::函数赋值给成员函数

c - 为什么在编译我的代码 C (linux) 时出现段错误(核心转储)

c++ - 如何在 C++ 中构建包含主要入口点(如 SDL)的库

c++ - 求一次水平线的旋转度数的方程式

C++ 结构和类型定义

c++ - 如何使用 SDL C++ 在 win32 窗口中设置 GUI 按钮?