2016-09-17 4 views
-2

SLD_Window * 윈도우를 다른 클래스에 전달하려고합니다. 올바른 프로그래밍 방법인지는 모르겠지만 시도하고 싶습니다. main.cpp에 SDL_Window * Window를 만들고 포인터 * Window를 다른 클래스에 전달합니다. 모든 렌더러 함수가 윈도우에서 아무런 영향을 미치지 않는 것을 알았지 만, window.cpp 스크린에 복사했을 때 빨간색이었습니다. 포인터를 전달하는 것처럼 보이지만 completly 새 창을 만듭니다. 메인 클래스에서 정의 된 동일한 윈도우에서 여러 클래스에서 어떻게 작업 할 수 있습니까? 모든 그리기 기능을 유지할 Draw.cpp를 작성하고자하기 때문에 이와 같습니다.SDL_Window를 다른 클래스에 전달

MAIN.CPP

SDL_Window *WindowMain = NULL; 
window Window(WindowMain , name); 
renderer = SDL_CreateRenderer(WindowMain , -1, SDL_RENDERER_ACCELERATED); 
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 100); 
SDL_RenderClear(renderer); 
SDL_RenderPresent(renderer) 

window.h

class window { 
public: 
    window(SDL_Window *Window, const char* Nazwa); 
    virtual ~window(); 
private: 
    SDL_Window *okno; 
}; 

window.cpp는

window::window(SDL_Window *Window, const char* Nazwa) { 
    okno = Window; 
    if(SDL_Init(SDL_INIT_VIDEO) !=0) 
    { 
     printf("Unable to initialize SDL due error: %s", SDL_GetError()); 
    } 
    okno = SDL_CreateWindow(Nazwa, 
        SDL_WINDOWPOS_CENTERED, // X position 
        SDL_WINDOWPOS_CENTERED, // Y position 
        800, // Width 
        600, // Height 
        SDL_WINDOW_SHOWN); 
    if(okno == NULL){ 
     printf("Unable to create window due error: %s", SDL_GetError()); 
    } 
} 

window::~window() { 
    SDL_DestroyWindow(okno); 
    SDL_Quit(); 
} 
+0

. 읽기 어려움 ... –

+0

문제는 'Window'매개 변수가 가리키는 창을 기대하고 있지만 실제로는 아무 것도하지 않는다는 것입니다. 당신은 분명히'window' 클래스에'okno' 필드를 가지고 있습니다 만, 그 필드를 다른 값으로 설정해도'main'에서 선언 한'okno'는 변경되지 않습니다. 전체 응용 프로그램을 작성하기 전에 기본 C++ 지식을 다듬어야합니다. – Cubic

답변

0

메인 루틴 로컬 okno를 선언

SDL_Window *okno = NULL; 
window Window(okno, name); // `okno` is NULL and remains NULL 
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED); 

window.cpp에서 okno이라는 회원을 사용하고 있습니다. 그 회원은 무엇이든간에, 같은 변수가 될 수 없습니다.

window::window(SDL_Window *Window, const char* Nazwa) { 
    okno = Window; 
    if(SDL_Init(SDL_INIT_VIDEO) !=0) 
    { 
     printf("Unable to initialize SDL due error: %s", SDL_GetError()); 
    } 
    okno = SDL_CreateWindow(Nazwa, 

모두 okno 변수

는 총 다른 범위를 가지고 있으며이 같은 window 생성자에서 okno를 초기화 할 수 없습니다.

=>okno 메인 레벨에서 NULL 남음 =>SDL_CreateRenderer에는 NULL 창 포인터가 전달됩니다.

는 (... 디자인, 그렇게 명명 정말 이상한입니다 언급하지 않음)

당신이 아마 원하는 것은 : 당신이 명명 규칙을 모든 유형/변수를 위반 한

window Window(name); 
SDL_Window *okno = Window.okno; 
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED); 
관련 문제