2016-09-17 487 views
-2

我試圖將SLD_Window *窗口傳遞給另一個類來處理它。 我不知道它是否是一種正確的編程方式,但我想嘗試一下。 我在main.cpp中創建一個SDL_Window *窗口,然後將指針*窗口傳遞給另一個類。 我發現所有渲染器函數在窗口中沒有任何影響,但是當我將它們複製到window.cpp屏幕時是紅色的。 看起來像我通過指針,但它創建完整的新窗口。 如何在主班級中定義的同一個窗口中的許多班級工作? 這是因爲我想建立一個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);