在类声明中写入
CPacket *m_pPacket;
在CDlgView结构函数写
*m_pPacket = new CPacket(m_lstOut);
在析构函数写delete m_pPacket

解决方案 »

  1.   

    CDlgview::CDlgview(CWnd* pParent /*=NULL*/)
    : CDialog(CDlgview::IDD, pParent):m_Packet(m_lstOut)
    {
    }
      

  2.   

    Jackzhu
    你的方法看起来是可行的,但实际上却不行。
    代码如下:
    CDlgview::CDlgview(CWnd* pParent /*=NULL*/)
    : CDialog(CDlgview::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CDlgview)
    m_szCommand = _T("");
    m_Command2 = _T("");
    //}}AFX_DATA_INIT
    cUnix = new CPacket(m_lstOut);
    }
    VC6的错误信息是:
    D:\Cteam\Monitor\Dlgview.cpp(26) : error C2664: 
    '__thiscall CPacket::CPacket(class CListBox)' : cannot 
    convert parameter 1 from 'class CListBox' to 'class CListBox'
            No copy constructor available for class 'CListBox'
    但是,如果我将 CPacket 的构造函数改写成传指针的方式,
    错误就消除了。代码如下:
    CPacket::CPacket(CListBox * pOut)
    {
    pLstOut = pOut;
    }CDlgview::CDlgview(CWnd* pParent /*=NULL*/)
    : CDialog(CDlgview::IDD, pParent)
    //:cUnix(m_lstOut)
    {
    //{{AFX_DATA_INIT(CDlgview)
    m_szCommand = _T("");
    m_Command2 = _T("");
    //}}AFX_DATA_INIT
    cUnix = new CPacket(&m_lstOut);
    }给人的感觉是,在构造函数传送类的实体就会出问题。
    真是很怪。另外,如果 CPacket 类不用指针(new ...... delete),
    直接用 CPacket cUnix, 可不可以?
      

  3.   

    如此即可:
    CDlgview::CDlgview (CWnd* pParent /*=NULL*/)
        : CDialog (CDlgview::IDD, pParent)
        , m_lstOut (其初始值)
        , cUnix (CPacket (m_lstOut))
    {
    }
    而且这里的m_lstOut 应该为指针类型
      

  4.   

    zjjjjz,在VC++中,当程序开始运行时,首先是生成全程变量的实例(object),然后才是按部就班的从CWinApp::InitiaInstanc()开始运行。因此,在你的程序中,CPacket会先于CDlgView创建,结果自然是CPacket的构造函数得不到CDlgView的成员变量。解决方法是:将全程变量CPacket cUnix;改为CPacket *pUnix;。其他的我相信难不倒你。
      

  5.   

    因为改为CPacket *pUnix;后程序开始运行时只会生成全局变量*pUnix的空间(4 byte),CPacket的实例并未生成。
      

  6.   

    C/C++的函数调用中采用传值方式,即在调用一个函数时,是把实参拷贝一份,并把新的拷贝传给被调用函数。对于C/C++中的标准数据类型,编译器实现其拷贝操作,但对于自定义的类型(类与结构、联合等),只有为其定义了拷贝构造函数时,在参数的形实传递中才能实现其正确的拷贝操作,否则编译器将给出错误信息。如:
    class A
    {
    public:
    A();
    };
    void Func(A a); // 错,类A没有拷贝构造函数
    这个问题的解决办法有三种:
    1. 为类A加一拷贝构造函数A(const A& a);
    2. Func原型改为指针调用 void Func(A* pa);
    3. Func原型改为引用调用 void Func(A& a);
      

  7.   

    感谢诸位的热情解答。怪不得,CPP中有这么多的new,
    delete 看来还是用指针比较不易出现这种编译问题。