Почему я не могу #include мой класс из другого файла в том же каталоге? - PullRequest
1 голос
/ 05 января 2020

У меня есть три файла в следующей структуре

- src/
  - events
    - ...
    - Event.cpp
    - Event.h
    - EventPtr.h
    - ...

Проблема в том, что #include Event.h внутри EventPtr.h, похоже, не работает. Вот код:

Event.h


#ifndef POKERSIMULATIONSINCPP_EVENT_H
#define POKERSIMULATIONSINCPP_EVENT_H

#include <iostream>
#include "game/Table.h"
#include "players/Player.h"

namespace events {

    enum TargetType {
        Dealer, Table, None, Players
    };


    class Event {
    private:
        TargetType target = None;
        std::string description = "Base event class";
        bool done = false;
    public:
        ~Event();

        Event();

        TargetType getTarget();

        std::string getDescription();

        bool getDone();

    };


}

#endif //POKERSIMULATIONSINCPP_EVENT_H

Событие. cpp


#include "Event.h"
#include <iostream>

namespace events {

    TargetType Event::getTarget() {
        return target;
    }

    std::string Event::getDescription() {
        return description;
    }

    bool Event::getDone() {
        return done;
    }

    Event::~Event() = default;

    Event::Event() = default;
}

EventPtr.h

#ifndef POKERSIMULATIONSINCPP_EVENTPTR_H
#define POKERSIMULATIONSINCPP_EVENTPTR_H

#include <memory>
#include "events/Event.h"

namespace events {

    typedef std::shared_ptr<Event> EventPtr;

}

#endif //POKERSIMULATIONSINCPP_EVENTPTR_H

Какой выдает следующую ошибку:

Ошибка

D:/PokerSimulationsInCpp/src/events/EventPtr.h:13:29: error: 'Event' was not declared in this scope
     typedef std::shared_ptr<Event> EventPtr;

Я также пробовал это для EventPtr.h

EventPtr.h, вторая попытка


#ifndef POKERSIMULATIONSINCPP_EVENTPTR_H
#define POKERSIMULATIONSINCPP_EVENTPTR_H

#include <memory>
#include "events/Event.h"
#include "Event.h"

namespace events {

    typedef std::shared_ptr<events::Event> EventPtr;

}

#endif //POKERSIMULATIONSINCPP_EVENTPTR_H

Что дает следующую ошибку:

D:/PokerSimulationsInCpp/src/events/EventPtr.h:14:37: error: 'Event' is not a member of 'events'
     typedef std::shared_ptr<events::Event> EventPtr;

Кто-нибудь знает, что происходит?

1 Ответ

1 голос
/ 05 января 2020

Возможно, у вас есть круговые зависимости.

Пожалуйста, проверьте файл, включенный в Event.h. Если вы обнаружите, что EventPtr.h включен, это может быть ошибкой.

Я оставляю вам ссылку в Википедии на это: Круговая зависимость

...