2016-09-17 4 views
-2

Я пытаюсь передать окно SLD_Window * в другой класс, чтобы работать над ним. Я не знаю, является ли это правильным способом программирования, но я хотел бы попробовать это. Я создаю окно SDL_Window * в main.cpp, а затем передаю указатель * Окно в другой класс. Я выяснил, что все функции Renderer не оказывают никакого влияния на окно, но когда я скопировал их на экран 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», изменится, но вы на самом деле ничего не делаете с ним. У вас, видимо, поле 'okno' в вашем классе' window', но это поле для другого значения не изменит 'okno', который вы указали в' main'. Прежде чем писать полное приложение, вы должны, возможно, изучить некоторые базовые знания на 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); 

в окне.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 из window конструктора, как это.

=>okno Осталось NULL на основном уровне =>SDL_CreateRenderer передан указатель окна NULL.

(не говоря уже о конструкции действительно странно, так это именование ...)

То, что вы, вероятно, хотите есть:

window Window(name); 
SDL_Window *okno = Window.okno; 
renderer = SDL_CreateRenderer(okno, -1, SDL_RENDERER_ACCELERATED); 
Смежные вопросы