@ascherbinin82

Member with constructor not allowed in anonymous aggregate?

Странная ошибка:
member ‘IWindowSystem ::’ with copy assignment operator not allowed in anonymous aggregate
class GLFW : IWindowSystem
-------------^--------------------
WindowSystem.cpp:
#include <WindowSystem.hpp>
#include <stddef.h>
#define GLFW
#ifdef GLFW
#include <GLFW/glfw3.h>
class GLFWWin : public IWindow
{
private:
    void (*CallBack)(IWindow *, int, int);
    GLFWwindow *window;
    

public:
    void static WindowResizeCallBack(GLFWwindow* window, int width, int height) {

    }
    GLFWWin(GLFWwindow *window)
    {
        this->window = window;
    }
    virtual void *getLowLevelInfo()
    {
        return window;
    }
    virtual void setWindowResizeCallBack(void (*CallBack)(IWindow *, int, int))
    {
        this->CallBack = CallBack;
        glfwSetFramebufferSizeCallback(window, GLFWWin::WindowResizeCallBack);
    }
};

class GLFW : public IWindowSystem
{
public:
    virtual void initWindowSystem()
    {
        glfwInit();
    }
    virtual IWindow *createWindow(const char *title, int width, int height)
    {
        return (IWindow *)new GLFWWin(glfwCreateWindow(width, height, title, NULL, NULL));
    }
    virtual IWindow *createFullScreenWindow(const char *title)
    {
        GLFWmonitor *monitor = glfwGetPrimaryMonitor();
        const GLFWvidmode *mode = glfwGetVideoMode(monitor);
        return new GLFWWin(glfwCreateWindow(mode->width, mode->height, title, monitor, NULL));
    }
};
#endif

WindowSystem.hpp:
class IWindow
{
public:
    virtual void *getLowLevelInfo() = 0;
    virtual void setWindowResizeCallBack(void (*CallBack)(IWindow *, int, int)) = 0;
};
class IWindowSystem
{
public:
    virtual void initWindowSystem() = 0;
    virtual IWindow *createWindow(char **title, int width, int height) = 0;
    virtual IWindow *createFullScreenWindow(char **title) = 0;
};
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 1
xorknown
@xorknown
Будут проблемы - решайте
1)
#define GLFW
#ifdef GLFW

class GLFW : public IWindowSystem 
-> class : public IWindowSystem {}


Вы определяете пустой макрос с именем GLFW, потом создаете класс с таким же названием. Чего вы этим добиваетесь?

2) Сигнатуры методов IWindowSystem и GLFW отлючаются
virtual IWindow *createFullScreenWindow(char **title) = 0;
-> virtual IWindow *createFullScreenWindow(const char *title) {}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы