我想實現一個簡單的觀察者模式來更新與汽車模型的相關信息的小部件。我一直在爲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
,事實並非如此。 –