程序如下,编译是没有问题,但是按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
{
}
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
{
}
这句要改:
CModel *pModel = getModel();
if (pModel)
setupObserver(pModel);
同时 ,在CABApp的构造函数CABApp()中添加一句:
_model = NULL;
setupObserver(getModel());//问题出在这里,注销掉就没有问题
这句要改:
CModel *pModel = getModel();
if (pModel)
setupObserver(pModel);
同时 ,在CABApp的构造函数CABApp()中添加一句:
_model = NULL;
>>>>运行是通过了,但是当我选择组合框里的选项时,依然弹出一样的报错,依然有问题。
//{{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
}这样子手动添加的消息映射是不是存在问题???
中的static_cast 改成dynamic_cast并在AddObserver函数中检查输入的指针是否为合法的指针