Visual C++构造函数初始化一个指针类问题
在看零基础学VisualC++那本书,第83页讲:在CTest6_1Dlg中添加一个变量:dlg1*pdlg;并且在CTest6_1Dlg的构造函数中初始化为NULL。添...
在看零基础学Visual C++那本书,第83页讲:在CTest6_1Dlg中添加一个变量:dlg1*pdlg;并且在CTest6_1Dlg的构造函数中初始化为NULL。添加变量没问题,但初始化不会弄,源程序如下:
class dlg1;
class CTest6_1Dlg : public CDialog
{
// Construction
public:
dlg1 *pdlg; //添加对象,但初始化怎么写,下面这个是构造函数吧?
CTest6_1Dlg(CWnd* pParent = NULL) ; // standard constructor
// Dialog Data
//{{AFX_DATA(CTest6_1Dlg)
enum { IDD = IDD_TEST6_1_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTest6_1Dlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CTest6_1Dlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
程序:http://pan.baidu.com/s/1i39o6ZN 展开
class dlg1;
class CTest6_1Dlg : public CDialog
{
// Construction
public:
dlg1 *pdlg; //添加对象,但初始化怎么写,下面这个是构造函数吧?
CTest6_1Dlg(CWnd* pParent = NULL) ; // standard constructor
// Dialog Data
//{{AFX_DATA(CTest6_1Dlg)
enum { IDD = IDD_TEST6_1_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTest6_1Dlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CTest6_1Dlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
程序:http://pan.baidu.com/s/1i39o6ZN 展开
2个回答
展开全部
首先你要实现一下构造函数CTest6_1Dlg(CWnd* pParent = NULL)
初始化dlg1 *pdlg;可以在构造函数的初始化列表里面初始化 或者在函数体里面初始化也行
比如:
CTest6_1Dlg::CTest6_1Dlg(CWnd* pParent = NULL):pdlg(NULL)
//构造函数冒号后面跟着的就是初始化列表
{//这里是函数体
}
或者在函数体里面初始化:
CTest6_1Dlg::CTest6_1Dlg(CWnd* pParent = NULL)
{
pdlg = NULL;
}
初始化dlg1 *pdlg;可以在构造函数的初始化列表里面初始化 或者在函数体里面初始化也行
比如:
CTest6_1Dlg::CTest6_1Dlg(CWnd* pParent = NULL):pdlg(NULL)
//构造函数冒号后面跟着的就是初始化列表
{//这里是函数体
}
或者在函数体里面初始化:
CTest6_1Dlg::CTest6_1Dlg(CWnd* pParent = NULL)
{
pdlg = NULL;
}
更多追问追答
追答
你第二张图 CTest6_1Dlg::CTest6_1Dlg(CWnd* pParent = NULL):pdlg(NULL)这个地方不能这样写 因为你在类外(在第一张图报错的地方)已经实现构造函数 ,两个只能留一个;假如你保留类外实现,那你第二张图 就应该是写成CTest6_1Dlg(CWnd* pParent = NULL); ;第二张图就写成
CTest6_1Dlg::CTest6_1Dlg(CWnd* pParent ):CDialg(CTest6_1Dlg::IDD,pParent),pdlg(NULL)
{
...........(此处内容省略)
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |