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日

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan