C ++ - 错误LNK2001:未解析的外部符号

时间:2015-04-18 21:41:48

标签: c++ sdl

我收到此错误:

1>Exception.obj : error LNK2001: unresolved external symbol "public: static struct SDL_Window * Exception::window" (?window@Exception@@2PAUSDL_Window@@A)

每次我尝试编译程序。我显然遗漏了一些东西,但我看不出我做错了什么......我怎样才能解决错误?以下是文件:

Exception.h:

#pragma once

#include <SDL.h>
#include <stdio.h>

class Exception
{
public:
    static SDL_Window* window;
    static enum ErrorMessageType{ CONSOLE, WINDOW, BOTH };

    static void initialize(SDL_Window* window);
    static void showErrorMessage(const char* error, Exception::ErrorMessageType messageType);
};

Exception.cpp

#include "Exception.h"

void Exception::initialize(SDL_Window* window)
{
    Exception::window = window;
}

void Exception::showErrorMessage(const char* error, Exception::ErrorMessageType messageType)
{
    switch (messageType)
    {
        case Exception::CONSOLE:
            printf("\n%s\n", error);
        break;

        case Exception::WINDOW:
            SDL_ShowSimpleMessageBox(0, "Error", error, window);
        break;

        case Exception::BOTH:
            printf("\n%s\n", error);
            SDL_ShowSimpleMessageBox(0, "Error", error, window);
        break;
    }
}

2 个答案:

答案 0 :(得分:3)

class Exception
{
public:
    static SDL_Window* window;

这声明Exception::window,但不实例化它。

在您的某个翻译单元中的某个位置,您还必须实例化此类成员:

SDL_Window *Exception::window;

答案 1 :(得分:2)

您需要在C ++文件中定义静态变量,如下所示

 SDL_Window* Exception::window;