3

私の 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)

【下手くそでごめんなさい。】

ここで何か助けていただければ幸いです。喜んでより多くのコードを示しますが、私がやろうとしていることを誰かが理解する必要があるのはこれだけだと思います。

前もって感謝します!

4

1 に答える 1

8

メンバーを修飾する必要があります。

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) );

それ以外の場合は、他の変数を宣言するだけであり、関数からの静的は未定義のままです。

于 2012-08-02T21:42:14.007 に答える