2016-09-17 155 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);