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