Я следил за учебником по шаблону наблюдателя, и я столкнулся со следующей проблемой.Декларация класса Forward C++
А именно, у меня есть следующие базовые классы:
class Subject;
class Observer;
Далее, я хочу определить еще два класса
class StockGrabber: public Subject {
//...
//the constructor involves a StockObserver object
StockGrabber(StockObserver so){....};
}
class StockObserver: public Observer {
//...
StockObserver(StockGrabber sg) {....};
}
Есть ли способ, которым я мог бы использовать вперед декларацию, так что StockGrabber бы знать что существует StockObserver? Учитывая их взаимозависимость, я не мог просто поменять позиции двух классов.
Как мне решить эту проблему? (оригинальный учебник был написан на Java, но я пытаюсь реализовать его на C++) Спасибо!
Эквивалентный код в Java будет означать ссылочную семантику, тогда как ваш код на C++ показывает семантику значений. Вероятно, вы захотите перейти на использование ссылочной семантики. Чтобы ответить на ваш вопрос, одно из тел функций должно быть определено вне очереди, чтобы использовать форвардные объявления. –