gpt4 book ai didi

C++ 和 Qt : observer pattern error

转载 作者:太空宇宙 更新时间:2023-11-04 16:26:42 24 4
gpt4 key购买 nike

我正在尝试实现一个简单的观察者模式,以使用汽车模型的相关信息更新小部件。对于我的观察者模式的更新方法,我不断收到一个相当令人费解的错误,其中编译器似乎无法识别传递的参数类型。这是 Observer 的标题:

#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;
};

以及 Subject 的实现(类 Car 继承 Subject 接口(interface)):

//
// 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 header 是抽象的吗?我还没有为它编写实现,所以也许这就是原因?

最佳答案

ObserverSubject 之间存在循环依赖。您可以通过在 Observer.h 中转发声明 Subject 而不是包含 Subject.h 来避免它:

class Subject; // forward declaration

class Observer {
...
};

并在 Subject.h 中做同样的事情:

class Observer; // forward declaration
class Subject {
...
};

关于C++ 和 Qt : observer pattern error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11002102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com