Проблема в том порядке, в котором вы объявили свои классы. Класс Subject
использует класс Observer
, но впоследствии было объявлено Observer
, поэтому, когда компилятор пытается скомпилировать Subject
, он не знает, что такое Observer
. Однако, поскольку Subject
также использует Observer
, вы не можете просто изменить порядок объявления.
Ответ на эту загадку заключается в предварительном объявлении class Observer
, так что по крайней мере компилятор знает, что Observer
является классом, даже если он не знает о нем много. Добавьте class Observer;
перед вашим class Subject
определением.
Вы также можете удалить слово class
из вашего векторного объявления.
class Observer;
class Subject {
// 1. "independent" functionality
vector < Observer * > views; // 3. Coupled only to "interface"
...