You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2017中重写已弃用虚函数重复告警问题求解

VS2017派生类重写弃用虚函数告警的解决办法

问题场景

现有代码结构如下:
foo.h:

class A
{
    [[deprecated]] virtual int F0() = 0;
};

bar.h:

class B : public A
{
    // 即使移除[[deprecated]],编译仍会触发弃用告警
    int F0();
};

在VS2017编译时,无论派生类B的F0()是否标记[[deprecated]],都会触发弃用告警——原因是基类A的虚函数已标记弃用,编译器会将该属性继承给派生类的重写函数。

解决办法

方法一:精准禁用单个函数的告警

使用VS编译器的#pragma warning指令,临时禁用F0()对应的弃用告警(VS中弃用函数的告警编号为C4996),避免影响其他代码:

class B : public A
{
#pragma warning(push)
#pragma warning(disable: 4996)
    int F0();
#pragma warning(pop)
};

push和pop用于保存和恢复当前告警状态,确保仅禁用该函数的告警。

方法二:全局禁用告警(不推荐)

如果项目中不需要关注所有弃用函数的告警,可以在项目属性中关闭C4996:

  1. 右键项目 → 属性 → 配置属性 → C/C++ → 高级 → 禁用特定警告
  2. 输入4996并确定

这种方法会关闭所有C4996告警,可能遗漏其他需要注意的弃用代码,因此仅在特殊场景下使用。

内容的提问来源于stack exchange,提问作者Max Yaffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:05:55