0

重複の可能性:
未定義の参照/未解決の外部シンボル エラーとは何ですか? また、どのように修正すればよいですか?

このコードを作成しました

  class Game{
    static SDL_Surface* screen;
public:
    //Initiate Game(SDL_Graphics, folder for output.....) 
    static void initialize();
    static void initializeScreen();


};

void Game::initializeScreen()
{

    Game::screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, 32,  SDL_DOUBLEBUF |SDL_HWSURFACE |SDL_SWSURFACE);
    SDL_Init(SDL_INIT_VIDEO);
    Game::screen == NULL ? printf("SDL_Init failed: %s\n", SDL_GetError()):printf("SDL_Init initialized\n");
    SDL_WM_SetCaption("SDL Animation", "SDL Animation");
}

コンパイルはできますが、e リンカ エラーが発生します。これを修正するにはどうすればよいですか?

1>game.obj : error LNK2001: unresolved external symbol "private: static struct SDL_Surface * Game::screen" (?screen@Game@@0PAUSDL_Surface@@A)

編集:これが私が修正した方法です。game.cppでこれを追加しました

SDL_Surface* Game::screen;

関数の外側*

4

2 に答える 2

1

別のソース ファイル (*.cpp) で静的 (変数) メンバー (関数ではない) を定義し、それらに対してリンクする必要があります。

例えば:

//MyClass.h
class MyClass {
    static int x;
};

//MyClass.cpp
#include "MyClass.h"
int MyClass::x;
于 2012-11-30T14:24:49.117 に答える
1

cpp ファイルに次の定義を追加する必要がありますSDL_Surface* Game::screen = NULL


static関数を使用して cpp ファイルで変数を定義せずに変数を使用できるコード例を次に示します。

#include <iostream>

struct Lazy {
    static int& GetValue() {
        static int a = 0;
        return a;
    }
};

int main() {
    std::cout << Lazy::GetValue() << std::endl;
    int& a = Lazy::GetValue();
    a = 1;
    std::cout << Lazy::GetValue() << std::endl;
}
于 2012-11-30T14:11:51.273 に答える