在 C++ 中,override
关键字确实不能加到函数的定义(实现)中,而是应该加在函数的声明中。override
的目的是在编译时检查该函数是否正确地重写了基类中的虚函数。
正确使用 override
- 在头文件中声明:在类的头文件中声明时使用
override
。
// ReceiverClass.h
#ifndef RECEIVERCLASS_H
#define RECEIVERCLASS_H
#include <QWidget>
#include <QEvent>
#include "HttpResponseEvent.h" // 引入自定义事件头文件
class ReceiverClass : public QWidget {
Q_OBJECT
public:
ReceiverClass(QWidget *parent = nullptr) : QWidget(parent) {}
protected:
void customEvent(QEvent* event) override; // 声明时加上 override
};
#endif // RECEIVERCLASS_H
- 在源文件中定义:在源文件中实现该函数时不需要
override
。
// ReceiverClass.cpp
#include "ReceiverClass.h"
#include <QDebug>
void ReceiverClass::customEvent(QEvent* event) {
if (event->type() == HttpResponseEvent::HttpResponseEventType) {
HttpResponseEvent* responseEvent = static_cast<HttpResponseEvent*>(event);
qDebug() << "Received response:" << responseEvent->getResponse();
}
}
总结
override
应该在声明中使用,它告知编译器这是一个重写基类函数的声明。- 在 定义 中,去掉
override
,因为它只用于声明时的类型检查。
这样,你的代码将正确地遵循 C++ 的语法和语义规则。