程序如下,编译是没有问题,但是按Execute Program(Ctrl+F5)是就会弹出一个报错对话框:CAB.exe遇到问题需要关闭,我们对此引起的不便表示抱歉。这个到底是什么问题啊?谁能告诉我啊,愁死了。请各位高手帮忙!!CABDlg.cpp
BOOL CABDlg::OnInitDialog()
{
CDialog::OnInitDialog();
setupObserver(getModel());//问题出在这里,注销掉就没有问题 return TRUE;  
}
void CABDlg::setupObserver(Observable *obser)
{ obser->addObserver(static_cast<Observer*>(& m_size));//m_size 是一个CButton类的成员变量
.....
}
CAB.h
class CABApp : public CWinApp
{
public:
CABApp(); CModel* _model;
}
inline CModel* getModel() {return static_cast<CABApp*>(AfxGetApp())->_model;}CModel.h
class CModel : public Observable
{
}

解决方案 »

  1.   

    F5 跟踪调试。好象是_model没有指向一个实例。
      

  2.   

    注意看下AfxGetApp())->_model   另外clean ,重新rebuild all
      

  3.   

    setupObserver(getModel());//问题出在这里,注销掉就没有问题 
    这句要改:
    CModel *pModel = getModel();
    if (pModel)
    setupObserver(pModel);
    同时 ,在CABApp的构造函数CABApp()中添加一句:
    _model = NULL;
      

  4.   

    >>>注意看下AfxGetApp())->_model  另外clean ,重新rebuild all这句没问题
      

  5.   

    >>>>>>>
    setupObserver(getModel());//问题出在这里,注销掉就没有问题 
    这句要改: 
    CModel *pModel = getModel(); 
    if (pModel) 
    setupObserver(pModel); 
    同时 ,在CABApp的构造函数CABApp()中添加一句: 
    _model = NULL; 
    >>>>运行是通过了,但是当我选择组合框里的选项时,依然弹出一样的报错,依然有问题。
      

  6.   

    >>fandh想问一个比较弱智的问题,组合框里要实现的内容,如果我不在×××Dlg.cpp里实现,而是另外写一个.h, .cpp文件,然后在×××Dlg.h里添加
            //{{AFX_DATA(CCanoncameraDlg)
    enum { IDD = IDD_CANONCAMERA_DIALOG };
    CDriveMode      m_DriveMode;  //
    //}}AFX_DATA 和×××Dlg.cpp的
    void C×××Dlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CCanoncameraDlg)
    DDX_Control(pDX, IDC_DRIVEMODE, m_DriveMode);  //IDC_DRIVEMODE 对应的是一个组合框
    //}}AFX_DATA_MAP
    }这样子手动添加的消息映射是不是存在问题???
      

  7.   

    >>CAB.exe遇到问题需要关闭,我们对此引起的不便表示抱歉   这个错误编译没有问题,运行也没问题。只是Combo Box组合框出了问题,而CButton控件没问题,所以我怀疑自己没有添加的时候出了问题,要不然就是没跟外部设备联系上,因为在组合框里的内容,选完之后,把消息反馈给这个设备。我找设备连接看看是不是这个问题先,谢谢你。
      

  8.   

    Unhandled exception in CAB.exe: 0xC0000005: Access violation 报这个错
      

  9.   

    是不是出错在:obser->addObserver(static_cast <Observer*>(& m_size));//m_size 是一个CButton类的成员变量有没有其它地方调用:setupObserver()?
      

  10.   

    没有了,只在那里调用的。当然啊,里面不止那条代码,还有其他组合框,Button控件的。不管怎样,谢谢你这么热心帮我!
      

  11.   

    将 obser->addObserver(static_cast <Observer*>(& m_size));
    中的static_cast 改成dynamic_cast并在AddObserver函数中检查输入的指针是否为合法的指针