如何解决 non-virtual member function marked 'override' hides virtual member function
时间: 2024-09-27 13:16:02 浏览: 380
在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` 关键字,保留原样的非虚函数。
相关问题
上面的题override提示error: only virtual member functions can be marked 'override'
这个错误通常是因为你在一个非虚函数上使用了`override`关键字。在C++11中,你可以使用`override`关键字来确保你正在重写一个虚函数,这样可以帮助你在编译时捕获错误。但是,如果你在非虚函数上使用`override`,编译器会发出“只有虚成员函数才能标记为'override'”的错误。
因此,请确保你在重写虚函数时使用`override`关键字,而不是在非虚函数上使用它。
JAR will be empty - no content was marked for inclusion!怎么解决
如果在使用Java命令打包JAR文件时出现"JAR will be empty - no content was marked for inclusion!"的错误,这通常是由于没有正确指定打包文件的内容而造成的。
解决此错误的方法为:
1. 确定你指定的打包路径和文件名是否正确,确保输入的命令无误;
2. 确认你在打包时指定了要包含的文件和文件夹,如果没有指定,则JAR文件将会是空的。可以使用以下命令指定要打包的内容:
```
jar cvf jar-file-name.jar files-to-include
```
其中,"jar-file-name.jar"是指定要生成的JAR文件名,"files-to-include"是指定要包含的文件和文件夹的路径。
3. 如果你使用的是Eclipse等Java开发工具,可以检查项目的Build Path设置,确保所有的类和资源都正确包含在项目中,然后再重新打包JAR文件。
阅读全文