小弟最近被这个问题搞的很苦恼啊,我建了个基于对话框的MFC程序,生成了一个CWriteHahaDlg类,我自己定义了一个名为CComm的一个类。现在我要做如下的操作:
    1)在CWriteHahaDlg 类中声明一个CComm (或CComm*)类型的成员变量。
    2)在CWriteHahaDlg 的初始化的函数中生成一个CComm 的一个对象,然后用这个去初始化 CComm(或CComm*)类型的成员变量,从而可以让CComm处理一些事,CWriteHahaDlg完成界面。
    3)在自定义的CComm类中,我想在他的某个方法中对CWriteHahaDlg 中的控件进行操作。     现在小弟的问题就是,我在CComm 类中声明一个CWriteHahaDlg的对象或者它的指针作为成员变量的时候不行(想用这个声明的成员变量来调用CWriteHahaDlg的函数操作控件),不知带这种思路有没有错,如果没有错怎么在声明的时候报错了,有错的话希望各位大侠出手帮帮忙,将感激不尽     
     //Comm.h
     private:
CWriteHahaDlg m_Dlg;//错误指向这行   错误代码:
   error C2146: syntax error : missing ';' before identifier 'm_Dlg'
f:\c++\writehaha\comm.h(31) : error C2501: 'CWriteHahaDlg' : missing storage-class or type specifiers
f:\c++\writehaha\comm.h(31) : error C2501: 'm_Dlg' : missing storage-class or type specifiers

解决方案 »

  1.   

    现在小弟的问题就是,我在CComm 类中声明一个CWriteHahaDlg的对象或者它的指针作为成员变量的时候不行(想用这个声明的成员变量来调用CWriteHahaDlg的函数操作控件),不知带这种思路有没有错,如果没有错怎么在声明的时候报错了,有错的话希望各位大侠出手帮帮忙,将感激不尽
    ================
    给CComm类改一下构造函数,通过构造函数将CWriteHahaDlg的对象指针传进来就行了。
      

  2.   

    你的意思是不是说把CComm的原来生成构造函数改掉不用?那还用不用把CWriteHahaDlg 设为成员变量?
    谢谢了,给讲讲呗!
      

  3.   

    你想在CComm中中操作对话框,首先要得到这个对话框对象的指针,你改一下CComm的构造函数就行了。
      

  4.   

    CComm中放个函数:
    // CxxxxDlg* m_pParentDlg;
    CComm::SetParent(CDialog *pParent)
    {
       m_pParentDlg=(CxxxxDlg*)pParent;
    }
      

  5.   

    头文件相互包含的问题,
    在CComm.h中声明CWnd* m_pParent;
    在CComm.cpp中#include"CWriteHahaDlg.h",
    写构造函数:
    CComm::CComm(CWnd* pParent)
    {
       m_pParent=pParent;
    }
    在需要用到CWriteHahaDlg 的地方转一下就行了:
    (CWriteHahaDlg *)m_pParent;
      

  6.   

    在CComm声明一个句柄
    在CWriteHahaDlg对CComm初始化是把自己的句柄赋给他
    这样一些简单的操作可以通过句柄完成
    复杂一下的就发个自定义消息出来让CWriteHahaDlg去完成
      

  7.   


       这个我明白,就是用这个对象的指针来调它的函数对吧,但是我有个疑问就是当我把构造函数改成
       头文件改成CComm(CWriteHahaDlg* pdlg)的时候出现错误了 error C2629: unexpected 'class CComm ('   再在CWriteHahaDlg的初始化函数中怎么给这个构造传this指针么,还是有什么方法可以获得CWriteHahaDlg的指针?
      

  8.   

    再在CWriteHahaDlg的初始化函数中怎么给这个构造传this指针么,还是有什么方法可以获得CWriteHahaDlg的指针?
    =====================
    将CComm的构造函数改成:
    CComm::Comm(CWriteHahaDlg *pDlg)
    {
    m_pDlg=pDlg;//m_pDlg是CComm的一个CWriteHahaDlg *型的成员变量,用来保存传过来的指针的。}
    然后在CWriteHahaDlg中引用CComm类时写成这样:
    CComm comm(this);就行了。
      

  9.   

    大致是这个样子,另外在CWriteHahaDlg的头文件中需要提前声明避免互包含
    class CCom
    {
    public:
        CCom(CWriteHahaDlg* pDlg)
        {}
    };CWriteHahaDlg::CWriteHahaDlg()
    {
       _com = new CCom(this);
    }
      

  10.   

    8楼和9楼的真的很感谢,但是就是在头文件中声明的时候有错误啊
    #include "WriteHaha.h"//CWriteHahaApp的头文件
    #include "WriteHahaDlg.h"class CComm  
    {
    public: CComm(CWriteHahaDlg * dlg);//这行报错了,错误为unexpected 'class CComm ('
    bool Listen(int PortNum);
    bool SendMsg(char *Msg, int Len, char *host, short port);
    virtual ~CComm();private:
    CWriteHahaDlg *m_Dlg;//这行报错 , error C2143: syntax error : missing ';' before '*'}求解释啊
      

  11.   


    应该是头文件相互包含引起的。
    #include "WriteHaha.h"//CWriteHahaApp的头文件
    #include "WriteHahaDlg.h"
    以上两行移到到CComm.cpp文件中;
    在原位置写如下代码:
    class CWriteHahaDlg;
      

  12.   

    建议楼主看下这个:
    http://hi.baidu.com/shilyx/blog/item/c1e3f7f277e29811b17ec5f2.html
    可以帮助理解头文件互相包含引发的问题。