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 文件中添加以下定义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 回答
1

您必须在单独的源文件(*.cpp)中定义静态(变量)成员(不是函数)并链接它们。

例如:

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

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