【问题标题】:Assert failed in OnInitDialog()OnInitDialog() 中的断言失败
【发布时间】:2015-01-14 12:43:40
【问题描述】:

所以当我想运行我的程序时出现“断言失败”错误消息。我知道这意味着某处应该为真的条件不是,但我不知道如何纠正它。

错误涉及以下行:

_AFXWIN_INLINE BOOL CEdit::SetReadOnly(BOOL bReadOnly)
   { ASSERT(::IsWindow(m_hind)); return (BOOL)::SendMessage(m_hWnd, EM_SETREADONLY, bReadOnly, 0L); }

所以我知道这是关于“只读”条件的,但我不知道在哪里更正。

我是 C++ 新手,如果我忘记在我的问题中提供重要信息,非常抱歉。

提前致谢!

【问题讨论】:

  • IsWindow 断言在窗口尚未创建(或销毁)时失败。你的代码放错地方了。例如,如果您尝试在对话框构造函数中执行此操作,请将代码移动到 OnOnitDialog。顺便说一句,问题标题看起来有点奇怪......
  • 是的,不好意思,这是一个老问题的标题,我想问却没问,自动恢复了,我没注意。我要试试你的建议谢谢!
  • 它实际上在 OnInidialog 上......对不起,因为我不太了解我在做什么,我真的不知道我应该添加什么信息......
  • 我认为m_hind 是一个印刷错误。虽然令人困惑,因为您不应该再次键入代码,只需从 IDE 复制和粘贴即可。
  • 我的 OnIni 对话框中是否应该有这些行:BOOL SetReadOnly( BOOL bReadOnly = TRUE );

标签: c++ windows visual-studio-2010 mfc assertion


【解决方案1】:

OnInitDialog 函数包含对基类函数的调用

CDialog::OnInitDialog();

将您对 SetReadOnly 的调用移到该行之后。编辑控制变量仅在该行之后初始化。

【讨论】:

    【解决方案2】:

    感谢您的帮助!最后,在逐行浏览整个代码之后,我意识到在 DoDataExchange 中我混合并在某个点放置了两次相同的变量而不是两个不同的变量......所以我真的不知道那是如何让我出现这个错误但是我想我会及时通知你,以防有人犯同样的心不在焉的错误并得到那个错误:)

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 2017-08-07
      • 2012-08-01
      • 2015-09-01
      • 2012-09-26
      • 2015-09-26
      相关资源
      最近更新 更多