将变量传递给函数,并将多个文件与类一起使用

时间:2014-12-10 03:43:06

标签: c++

我有一个名为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() );
            }

1 个答案:

答案 0 :(得分:0)

您永远不应在头文件中声明全局变量。当您使用带有#include指令的某个标头时,它会将整个内容简单地插入到源c / cpp文件中。如果在两个源文件中包含带有全局变量的标头,则表示创建了此全局变量的两个副本。因此,在mainkey.Initial中,您更改了一个变量,但在Overworld类中,您尝试访问完全不同的变量。要防止出现这种情况,您应该在某个源cpp文件中声明全局变量,并使用关键字extern在相应的标头中创建指向它的链接。

extern SDL_Renderer* gRenderer;