我有一个名为SDL_Renderer * gRenderer的变量。此变量在名为initialization的头文件中以私有方式声明。在头文件中还有一个声明为public的函数。
bool Initial();
Initial函数将gRenderer的值从NULL更改为不同的值。
我想在不同的函数中从不同的类访问不同的变量。每当我使用友元类时,它返回值NULL。
这是在类
中运行每个函数的主要函数 int main(int argc, char *argv[])
{
Initialize mainkey;
mainkey.Initial();
Overworld key;
}
函数Initial的部分,用于更改gRenderer值。
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED );
if( gRenderer == NULL )
{
printf("Renderer Failed to be created! Check Initialize Function!! SDL Error: %s\n", SDL_GetError() );
InitialStart = false;
}
和另一个类中的函数的一部分,它想要使用Initial中的更改值。
Initialize bgkey;
//Create texture from surface pixels
newBG = SDL_CreateTextureFromSurface( bgkey.gRenderer, LoadedImage );
if( newBG == NULL )
{
printf("Unable to create texture properly! SDL Error", path.c_str(), IMG_GetError() );
}
答案 0 :(得分:0)
您永远不应在头文件中声明全局变量。当您使用带有#include
指令的某个标头时,它会将整个内容简单地插入到源c / cpp文件中。如果在两个源文件中包含带有全局变量的标头,则表示创建了此全局变量的两个副本。因此,在mainkey.Initial
中,您更改了一个变量,但在Overworld
类中,您尝试访问完全不同的变量。要防止出现这种情况,您应该在某个源cpp文件中声明全局变量,并使用关键字extern
在相应的标头中创建指向它的链接。
extern SDL_Renderer* gRenderer;