静态初始化C++

Static initialisation C++

本文关键字:C++ 初始化 静态      更新时间:2023-10-16

我对C++的理解有限,这意味着我不知道如何正确地执行以下操作:

#include "Platform.h"
#include "Global.h"
SDL_Surface *ms_pSmall (Global::sharedGlobal()->loadImage(RESOURCE_SMALL_PLATFORM) );
SDL_Surface *ms_pMedium(Global::sharedGlobal()->loadImage(RESOURCE_MEDIUM_PLATFORM));
SDL_Surface *ms_pLarge (Global::sharedGlobal()->loadImage(RESOURCE_LARGE_PLATFORM) );
//Initialise platform variables
Platform::Platform()
{   
    int imgSize = rand() % 3;
    switch (imgSize)
    {
        case 2:
            m_pImage = ms_pSmall;
            break;
        case 1:
            m_pImage = ms_pMedium;
            break;
        case 0:
            m_pImage = ms_pLarge;
            break;
    }
}

其中ms_pSmall等是静态指针,Global是具有以下函数声明的单例:

static Global* sharedGlobal();
SDL_Surface* loadImage(const std::string& filename) const;

代码似乎编译正确,但链接器抱怨:

Undefined symbols for architecture i386:"Platform::ms_pMedium", referenced from:
  Platform::Platform() in Platform.o    "Platform::ms_pLarge", referenced from:
  Platform::Platform() in Platform.o    "Platform::ms_pSmall", referenced from:
  Platform::Platform() in Platform.o 
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

[很抱歉压痕不好。]

这里的任何帮助都将不胜感激,我会很高兴地展示更多的代码,但我认为这一切都是有人需要了解我正在尝试做什么。

提前感谢!

您需要对成员进行资格鉴定:

SDL_Surface* Platform::ms_pSmall (Global::sharedGlobal()->loadImage(RESOURCE_SMALL_PLATFORM) );
SDL_Surface* Platform::ms_pMedium(Global::sharedGlobal()->loadImage(RESOURCE_MEDIUM_PLATFORM));
SDL_Surface* Platform::ms_pLarge (Global::sharedGlobal()->loadImage(RESOURCE_LARGE_PLATFORM) );

否则,您只是在声明其他变量,而函数中的静态变量是未定义的。