VCloverNo1 2023-02-03 00:36 采纳率: 80%
浏览 14
已结题

MFC虚函数设置不当导致连接错误

void CMy1Dlg::OnOK()
{
// TODO: Add extra validation here

CDialog::OnOK();

}
以上程序”CMy1Dlg::OnOK()“, ”CDialog::OnOK()“在vc++自动生成的类中,OnOK()前都加了virtual关键字,即virtual void OnOK(),但当删除CDialog::OnOK()前的virtual时,连接出现错误,其中CMy1Dlg继承于CDialog,即class CMy1Dlg:public CDialog
error LNK2001: unresolved external symbol "protected: void __thiscall CDialog::OnOK(void)"
怎么回事?

  • 写回答

2条回答 默认 最新

  • Eliot5566 2023-02-03 02:03
    关注

    这是因为 virtual 关键字表明 CMy1Dlg::OnOK 和 CDialog::OnOK 都是虚函数,
    并且当调用 CDialog::OnOK 时,实际上是调用了 CMy1Dlg 中重写的 OnOK 函数。
    但是,如果删除了 virtual,则 CDialog::OnOK 不再是虚函数,
    因此调用它时不会再查找重写的版本。
    因此,编译器在链接时无法找到 CDialog::OnOK 函数的实现,导致 LNK2001 错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月22日
  • 创建了问题 2月3日

悬赏问题

  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元