C++ 将SDL_窗口传递给另一个类

C++ 将SDL_窗口传递给另一个类,c++,sdl,C++,Sdl,我正在尝试将SLD_Window*窗口传递给另一个类来处理它。 我不知道这是否是一种正确的编程方式,但我想尝试一下。 我正在main.cpp中创建一个SDL_Window*窗口,然后将指针*窗口传递给另一个类。 我发现所有渲染器函数在窗口中都没有任何影响,但当我将它们复制到window.cpp时,屏幕是红色的。 看起来我传递了指针,但它创建了一个全新的窗口。 如何在主类中定义的同一窗口上的多个类中工作? 它是这样的,因为我想构建一个Draw.cpp,在这里我将保留所有绘图函数 main.cpp

我正在尝试将SLD_Window*窗口传递给另一个类来处理它。 我不知道这是否是一种正确的编程方式,但我想尝试一下。 我正在main.cpp中创建一个SDL_Window*窗口,然后将指针*窗口传递给另一个类。 我发现所有渲染器函数在窗口中都没有任何影响,但当我将它们复制到window.cpp时,屏幕是红色的。 看起来我传递了指针,但它创建了一个全新的窗口。 如何在主类中定义的同一窗口上的多个类中工作? 它是这样的,因为我想构建一个Draw.cpp,在这里我将保留所有绘图函数

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)
窗户

    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();
}

主例程在本地声明
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
变量的作用域完全不同,您不能像这样从
窗口
构造函数初始化
okno

=>
okno
在主级别保持
NULL
您的
SDL\u CreateRenderer
被传递一个空窗口指针

(更不用说设计真的很精巧,命名也很精巧…)

您可能想要的是:

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

您违反了所有类型/变量命名约定。难以阅读…问题在于,您希望
窗口
参数所指向的窗口发生更改,但实际上您并没有对其执行任何操作。显然,在
窗口
类中有一个
okno
字段,但是将该字段设置为其他值不会更改您在
main
中声明的
okno
。在编写完整的应用程序之前,您应该先复习一些基本的C++知识。