我想实现一个简单的观察者模式来更新与汽车模型的相关信息的小部件。我一直在为Observer模式的更新方法收到一个相当复杂的错误,其中编译器似乎无法识别传递参数的类型。这是观察头:C++和Qt:观察者模式错误
#include "Subject.h"
class Observer
{
public:
virtual void update(Subject &car) = 0;
};
主题的头文件:
#include <QList>
#include "Observer.h"
class Subject
{
protected:
QList<Observer *> m_observers;
public:
virtual void registerObserver(Observer &) = 0;
virtual void removeObserver(Observer &) = 0;
virtual void notifyObservers() = 0;
};
为主题(Car类继承对象接口)而实现:
//
// Subject interface implementation
//
void Car::registerObserver(Observer &observer)
{
m_observers.append(&observer);
}
void Car::removeObserver(Observer &observer)
{
int i = m_observers.indexOf(&observer);
if (i >= 0)
m_observers.removeAt(i);
}
void Car::notifyObservers()
{
for(int i = 0; i < m_observers.size(); ++i)
m_observers.at(i)->update(*this);
}
然而,编译器在notifyObservers方法中给我一个错误:
/home/dylan/Desktop/CarModel/Car.cpp:50: error: no matching function for call to ‘Observer::update(Subject&)’
candidate is: /home/dylan/Desktop/CarModel/Observer.h:11: virtual void Observer::update(int&)
呃......什么?正如你所看到的,编译器似乎认为update的参数是对int的引用。这是因为我的Observer头是抽象的吗?我还没有为它写过一个实现,所以也许这是为什么?
是否在您定义'Observer'的位置声明了'Subject'? –
是的。我忘了为上面的Observer头添加include,尽管它已经在我的代码中了。我怀疑是 – dtg
,事实并非如此。 –