C++编译器问题

zeb*_*und 0 c++ compiler-errors

给出以下两个头文件:

#ifndef EVENT_HANDLER_H
#define EVENT_HANDLER_H

#include <SFML/Window.hpp>
#include <SFML/Window/Event.hpp>
#include "window_handler.h"

class EventHandler
{
public:
    EventHandler(WindowHandler & classOwner);

    WindowHandler * m_windowHandler;

private:
    bool m_leftKeyDown;
    bool m_rightKeyDown;
    bool m_upKeyDown;
    bool m_downKeyDown;

    unsigned int m_mouseX;
    unsigned int m_mouseY;

};

#endif
Run Code Online (Sandbox Code Playgroud)

#ifndef WINDOW_HANDLER_H
#define WINDOW_HANDLER_H

#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include "event_handler.h"

class WindowHandler
{
public:
    WindowHandler();
    sf::Window m_app;

private:
    EventHandler m_eventHandler;
};
#endif
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

In file included from window_handler.h:6:0,
                 from main.cpp:3:
event_handler.h:13:29: error: expected ‘)’ before ‘&’ token
event_handler.h:15:2: error: ‘WindowHandler’ does not name a type
Run Code Online (Sandbox Code Playgroud)

据我所知,我做的一切都很完美.我在这里错过了什么吗?

Bri*_*ach 6

你有一个循环依赖.

当你定义了window_handler.h包含但实际上没有达到定义类的位置时.当试图包括它不是因为event_handler.hWINDOW_HANDLER_Hevent_handler.hwindow_handler.hWINDOW_HANDLER_H

如上所述,您需要event_handler.h通过删除include 来转发声明window_handler.h并将其替换为:

class WindowHandler;
Run Code Online (Sandbox Code Playgroud)