实例一:生成一个对话框程序,在加入一个对话框类,在加入的对话框中定义一个生成对话框的指针,并初始化。
m_sql = new CSqlDlg;错误:拷贝构造函数不存在。'operator =' function is unavailable(不知道我理解的对不对)实例二:生成一个对话框程序,在加入一个对话框类,并使两个类可以相互调用。在加入的对话框中定义一个生成对话框的指针,并初始化。成功没有错误。什么原因?

解决方案 »

  1.   

    m_sql = new CSqlDlg
    ==============
    每一类的实例在产生时都要调用构造函数,而CDialog这个类没有默认构造函数,它的构造函数要求有参数,你上面没有给它参数,它当然报错。所谓默认构造函数就是没有参数的构造函数。
      

  2.   

    dialog的构造函数有固定值,那不是说明:可以不用参数了吗?还有就是:那为什么在第二种情况下可以呢?
      

  3.   

    很明确啊,“默认”拷贝构造函数不存在,是你的CSqlDlg没有默认构造函数,CDialog是有一个有默认参数的构造函数,但是你的CSqlDlg没有。另外,引用其它窗口类,应该将其他窗口类(对话框类)的指针传进来而不是另外生成一个。
      

  4.   

    给指针初始化,并不调用 你dilog的构造函数,只是把你已经创建的dilog对像的地址赋给了这个指针
      

  5.   

    to Mackz 
    如果我在生成对话框dialog中显示:dialog1对话框,
    根据你说的:其他窗口类(对话框类)的指针传进来而不是另外生成一个。
    m_dialog1 = (CDialog1*)GetDlgItem(IDD_DIALOG1);
    这样不行?
    请问要如何得到传进来的指针。
      

  6.   

    还有第二个实例:
    大家不知道看了没有?
    m_sql = new CSqlDlg ;
    在第一中情况下报错了。
    但是在第二中情况下却没有错。
    难道说:在第二种情况下,CDialog有默认的构造函数了。还有:如果我在生成的对话框CDialog内直接定义一个CDialog1的实例,那就可以直接操作这个实例了。
    我定义了一个CDialog1的指针,那我要如何去实例化这个类指针呢?
      

  7.   


    #define JADE_NEW_RETURN(POINTER,CONSTCLASS,EXCEPT)  \
    do{ try{ POINTER = new CONSTCLASS; } \
    catch(std::bad_alloc) \
    { POINTER=0;return EXCEPT; } \
    }while(0)#define JADE_NEW_NORETURN(POINTER,CONSTCLASS)   \
    do{ try{ POINTER = new CONSTCLASS; } \
    catch(std::bad_alloc) \
    { POINTER = 0 ; return ;} \
    }while(0)
    检查构造函数
      

  8.   

    类指针可以再定义类指针吗,怎样初始化
    例如:
    TagenelH  tag ;
    TagenelH 是一个类指针
    可以这样定义吗?