警告 C26435 函数 CXxxx::DoDataExchange 应准确指定 `virtual`、`override` 或 `final` 之一 (c.128)

Posted

技术标签:

【中文标题】警告 C26435 函数 CXxxx::DoDataExchange 应准确指定 `virtual`、`override` 或 `final` 之一 (c.128)【英文标题】:Warning C26435 Function CXxxx::DoDataExchange should specify exactly one of `virtual`, `override`, or `final` (c.128) 【发布时间】:2021-10-18 15:00:18 【问题描述】:

这是另一个代码分析警告:

警告C26435 函数CAssignSelectedColumnDlg::DoDataExchange 应指定virtualoverridefinal 之一(c.128)。

示例(样板 MFC 代码):

void CAssignSelectedColumnDlg::DoDataExchange(CDataExchange* pDX)

...
...

如果我理解正确的文档,我需要附上:

overridefinal

...到头文件中的函数声明?

【问题讨论】:

【参考方案1】:

是的。您发布的链接中有另一个链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Rh-override

你可以相信作者:)

编辑:

Bjarne Stroustrup
Herb Sutter

为了他人的利益:

void DoDataExchange(CDataExchange* pDX) final;

【讨论】:

谢谢。在我的情况下,我会使用关键字final,因为我不会从我的对话框中派生一个新类。我就是这么理解的。 final 在这种情况下是正确的关键字。如果要派生该类,则可以使用override,除非它是类层次结构的基类,在这种情况下需要virtual 关键字。该诊断旨在防止意外地将virtual 类成员隐藏在具有相同签名的非virtual 类成员的派生类中,而不是覆盖它。这将是编译得很好的合法代码,生成大部分时间都可以运行的程序。这使得发现这个错误特别具有挑战性。

以上是关于警告 C26435 函数 CXxxx::DoDataExchange 应准确指定 `virtual`、`override` 或 `final` 之一 (c.128)的主要内容,如果未能解决你的问题,请参考以下文章

Erlang 不会警告未使用的函数参数

如何将警告和错误保存为函数的输出?

Pandas - DataFrame reindex 函数返回警告

没有返回类型定义的 main() 函数给出警告

Xcode 9 中的“此函数声明不是原型”警告

如何使 gcc 警告缩小函数参数