如何解决 non-virtual member function marked 'override' hides virtual member function
时间: 2024-09-27 17:16:02 浏览: 230
oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法
5星 · 资源好评率100%
在C++中,遇到 "non-virtual member function marked 'override' hides virtual member function" 这种错误,意味着你试图在一个非虚函数上标记 `override` 关键字,但这覆盖了一个基类中的虚拟函数。这是因为只有声明为 `virtual` 的成员函数才能被子类覆盖为 `override`。
以下是解决这种情况的步骤:
1. 检查函数声明:确认该函数是不是应该被声明为 `virtual`。如果是覆盖基类的虚拟函数,则应在其声明中添加 `virtual` 关键字。
```cpp
class Base {
public:
virtual void someFunction() override; // 基类中的虚函数
};
class Derived : public Base {
public:
// 如果你想让这个函数覆盖Base的someFunction,应该这样做
void someFunction() override; // 声明为virtual,并保留override关键字
};
```
2. 检查继承层次结构:确保继承自正确的基类,并且你希望覆盖的函数确实是在那个基类中声明为虚拟的。
3. 确保意图正确:如果不是真的想要覆盖,可以删除 `override` 关键字,保留原样的非虚函数。
阅读全文