Wsuggest-override 发出警告,即使存在覆盖

Posted

技术标签:

【中文标题】Wsuggest-override 发出警告,即使存在覆盖【英文标题】:Wsuggest-override raise warning even if override is present 【发布时间】:2018-01-12 16:23:21 【问题描述】:

我目前正在尝试将所有缺少的覆盖添加到项目中,因此我使用 Wsuggest-override。

来自文档:

-Wsuggest-override

警告关于覆盖没有用 override >keyword 标记的虚函数。

但是,它会为所有应该使用覆盖关键字的函数发出警告即使该关键字实际上存在

来自日志:

In file included from LdBitFieldProperty.cpp:16:0:
LdBitFieldProperty.h:47:29: warning: ‘virtual std::__cxx11::string LdBitFieldProperty::GetStringValue(size_t) const’ can be marked override [-Wsuggest-override]
         virtual std::string GetStringValue( size_t aIndex = 0 ) const override;

我是否遗漏了有关此警告用法的某些内容?

我的 gcc 是:gcc version 6.4.1 20170727 (Red Hat 6.4.1-1) (GCC)

【问题讨论】:

可能由函数指定了“virtual”关键字这一事实触发您可以尝试删除它并查看警告是否仍然存在? 我过去曾使用Clang-Tidy 做过类似的事情。恕我直言,它做得很好。 您能发布一个可重现的最小示例吗? @SergeyA 我会说我喜欢保留virtual,即使它是多余的,也会惹恼所有人。 :P 当我能够始终如一地查看序言时,更容易发现虚函数,而不是只关注其中一些的参数列表。 在最小的场景下我没有收到任何警告:struct A virtual void f() = 0;; struct B : A void f() override;; 【参考方案1】:

对不起,这是一个愚蠢的问题,有一个 #define override 删除 override 关键字,因为该项目曾经是 c++99 兼容 linux 平台。

删除定义解决了问题。

【讨论】:

以上是关于Wsuggest-override 发出警告,即使存在覆盖的主要内容,如果未能解决你的问题,请参考以下文章

即使在 Jenkins 构建上禁用了浅层,SonarQube 也会发出浅层克隆警告

在CMake中如何使`TARGET_LINK_LIBRARIES'禁止第三方库代码发出警告?

liunx 常用命令

在编译时发出警告?

QQmlApplicationEngine 没有发出警告信号

禁止对 Visual Studio 中的所有项目发出警告