CManagerPersonnel类中
在头文件中定义CPersonnelInfo m_pPersonnel;
在BOOL CManagerPersonnel::OnInitDialog() 中初始化指针
m_pPersonnel.SetDlgPt(this);void CManagerPersonnel::Display(CString str)
{ SetDlgItemText(IDC_EDIT1,str);
MessageBox(str);
}
CPersonnelInfo类中定义  CManagerPersonnel* mPlg;
void CPersonnelInfo::SetDlgPt(CManagerPersonnel *ptr)
{
mPlg=ptr;}void CPersonnelInfo::OnButton1() 
{
// TODO: Add your control notification handler code here if(!mPlg) return ;
mPlg->Display("hello world");}
当点击Button1出现错误 why?

解决方案 »

  1.   

    为什么呀?CManagerPersonnel类中
    在头文件中定义CPersonnelInfo m_pPersonnel;
    在BOOL CManagerPersonnel::OnInitDialog() 中初始化指针
    m_pPersonnel.SetDlgPt(this);void CManagerPersonnel::Display(CString str)
    { SetDlgItemText(IDC_EDIT1,str);
    MessageBox(str);
    }
    CPersonnelInfo类中定义  CManagerPersonnel* mPlg;
    void CPersonnelInfo::SetDlgPt(CManagerPersonnel *ptr)
    {
    mPlg=ptr;}void CPersonnelInfo::OnButton1() 
    {
    // TODO: Add your control notification handler code here if(!mPlg) return ;
    mPlg->Display("hello world");}
    当点击Button1出现错误 why?
      

  2.   

    但是我已经用void CPersonnelInfo::SetDlgPt(CManagerPersonnel *ptr)
    {
    mPlg=ptr;}
    应该不用了吧,这已经把指针传进去了
      

  3.   

    楼主代码应该没有问题
    仔细检查变量mPlg在Set之后,是否被越界的内存操作覆盖
      

  4.   

    在头文件中定义CPersonnelInfo m_pPersonnel;
    在BOOL CManagerPersonnel::OnInitDialog() 中初始化指针
    m_pPersonnel.SetDlgPt(this);你定义的m_pPersonnel对象和Onbutton1的那个对象是两个对象
    所以出问题
    想把CManagerPersonnel的指针传过去,最简单就是使用全局变量或者类的静态数据成员
      

  5.   

    测试:
    将mPlg初始化为NULL
    确认m_pPersonnel.SetDlgPt(this);确实被执行过...
      

  6.   

    shi是的,m_pPersonnel.SetDlgPt(this)确实执行了,但是我该怎么办呢,另外,为什么这是两个对象呢
      

  7.   

    因为一个类可以产生许多对象
    你对话框类继承来的CPersonnelInfo 
    和在头文件中定义CPersonnelInfo m_pPersonnel;
    是一个类产生的两个不同对象
    A* g_this;//全局变量
    A::A()
    {
     g_this = this;
    }
    B::Test()
    {
     g_this->
    }
      

  8.   

    要得到特定的一个对象的指针,可以用全局变量的方式来传递,当特定对象构造是,传递this指针到全局变量g_this