Проблемы с компилятором C ++ - PullRequest
0 голосов
/ 02 сентября 2011

Учитывая следующие два заголовочных файла:

#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

И

#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

Я получаю следующий вывод:

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

Насколько я знаю,хотя я все прекрасно делаю.Я что-то здесь упускаю?

Ответы [ 3 ]

6 голосов
/ 02 сентября 2011

У вас есть круговая зависимость.

Когда window_handler.h включает event_handler.h, вы определили WINDOW_HANDLER_H, но на самом деле не достигли точки, где определен класс.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 101 '*' * * * * * * * * * * * * * 101 '* * * *' * 101 '* * "

class WindowHandler;
1 голос
/ 02 сентября 2011

Ваши заголовки имеют круговую зависимость включений. В зависимости от ваших потребностей вы можете сменить одно на предварительное объявление или создать третий заголовок с необходимым общим кодом.

1 голос
/ 02 сентября 2011

В event_handler.h удалите строку

#include "window_handler.h"

и замените ее на

class WindowHandler;

Проблема заключается в том, что в ваших списках включения есть цикл.Таким образом, из-за включения защиты у вас будет файл, который пытается использовать неопределенный WindowHandler, или неопределенный EventHandler.Посмотрите на вывод препроцессора, и это должно иметь больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...