2015-04-18 2 views
0

Я получаю эту ошибку:C++ - LNK2001 ошибки: неразрешенный внешний символ

1>Exception.obj : error LNK2001: unresolved external symbol "public: static struct SDL_Window * Exception::window" ([email protected]@@[email protected]@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; 
    } 
} 

ответ

3
class Exception 
{ 
public: 
    static SDL_Window* window; 

Объявляет Exception::window, но не создать его экземпляр.

Где-то в одном из ваших единиц перевода, вы должны также создать экземпляр этого члена класса:

SDL_Window *Exception::window; 
2

Вам необходимо определить статическую переменную в файле C++ следующим образом

SDL_Window* Exception::window; 
+0

Неправильно. Ключевое слово static не принадлежит здесь и вызовет ошибку компилятора. –

+0

@SamVarshavchik скопируйте ошибку патча, исправлено – Steephen

Смежные вопросы