C++ C++;编译器问题
给定以下两个头文件:C++ C++;编译器问题,c++,compiler-errors,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); Windo
#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
但据我所知,我一切都做得很好。我在这里遗漏了什么吗?在event\u handler.h中,删除该行
#include "window_handler.h"
并将其替换为
class WindowHandler;
class WindowHandler;
这里的问题是,您的包含列表中有一个循环。因此,由于有include-guards,您将有一个试图使用未定义的WindowHandler的文件,或者有一个未定义的EventHandler。看看预处理器的输出,这应该更有意义。您的标题具有循环的includes依赖关系。根据您的需要,您可能可以将其中一个更改为转发声明,或者您必须创建第三个标头,其中包含所需的公共代码。您有一个循环依赖项 当
window\u handler.h
包含事件\u handler.h
时,您已经定义了window\u handler\u h
,但实际上还没有到达定义类的点。当event\u handler.h
试图包含window\u handler.h
时,由于window\u handler\u h
如上所述,您需要在事件处理程序.h
中向前声明,方法是删除窗口处理程序.h的include,并将其替换为:
class WindowHandler;
class WindowHandler;