2012-11-30 8 views
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"); 
} 

을 만든
What is an undefined reference/unresolved external symbol error and how do I fix it?

이걸 고쳐?

1>game.obj : error LNK2001: unresolved external symbol "private: static struct SDL_Surface * Game::screen" ([email protected]@@[email protected]@A) 

편집 : 이것은 내가 그것을 고정 game.cpp 의 모든 기능 *

답변

1

정적 소스 파일 (* .cpp)에 정적 (가변) 멤버 (기능 제외)를 정의하고 링크해야합니다. 예를 들어

:

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

//MyClass.cpp 
#include "MyClass.h" 
int MyClass::x; 
+0

이 오류는'오류 C2655 : 'Game :: screen': 현재 범위에서 정의 또는 재 선언이 잘못되었습니다. ' – Laggy

+1

도움을 주셔서 감사합니다. 알아 냈습니다. 함수 initializeScreen()에 넣으려고했는데, 그래서 나는 함수 밖에 놓았고 그것은 작동했습니다 :) – Laggy

1

당신은에 다음과 같은 정의를 추가해야이

SDL_Surface* Game::screen; 

외부를 추가하는 방법 당신의 cpp 파일 SDL_Surface* Game::screen = NULL. 여기


당신이 기능을 사용하여 CPP 파일을 정의하지 않고 static 변수가 할 수있는 예제 코드입니다.

#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; 
} 
+0

은 기본적으로 개인 아닌가요? – Laggy

+0

오오 이제 알겠습니다 :) – Laggy

+2

cpp 파일에'SDL_Surface * screen;'을 정의하지 않았기 때문에 문제가 발생한 것 같습니다. 정적 변수는'SDL_Surface * Game :: screen = NULL'과 같이 정의되어야합니다. – andre