我照着VC++技术内幕学习时出现了如下问题:
CSpecialFileDialog.h
public:
CSpecialFileDialog(BOOL bOpenFileDialog,LPCTSTR loszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL);
CSpecialFileDialog.cpp
CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog,LPCTSTR loszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL)
: CFileDialog(bOpenFileDialog,loszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
{
//{{AFX_DATA_INIT(CSpecialFileDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
问题:
1、上面的这个构造函数,在classview里面没有出现
2、编译不通过,错误为:
SpecialFileDialog.cpp
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 6
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 5
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 4
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 3
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 2
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
Error executing cl.exe.FileDialog.exe - 5 error(s), 0 warning(s)都是redefinition,可是我在specialfiledialog.h里面只有构造函数的声明才有上面六个变量的定义,这怎么会重复定义呢?
帮忙 谢谢~!!!
CSpecialFileDialog.h
public:
CSpecialFileDialog(BOOL bOpenFileDialog,LPCTSTR loszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL);
CSpecialFileDialog.cpp
CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog,LPCTSTR loszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL)
: CFileDialog(bOpenFileDialog,loszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
{
//{{AFX_DATA_INIT(CSpecialFileDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
问题:
1、上面的这个构造函数,在classview里面没有出现
2、编译不通过,错误为:
SpecialFileDialog.cpp
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 6
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 5
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 4
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 3
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
G:\other\ebook\VC\FileDialog\SpecialFileDialog.cpp(23) : error C2572: 'CSpecialFileDialog::CSpecialFileDialog' : redefinition of default parameter : parameter 2
g:\other\ebook\vc\filedialog\specialfiledialog.h(17) : see declaration of 'CSpecialFileDialog::CSpecialFileDialog'
Error executing cl.exe.FileDialog.exe - 5 error(s), 0 warning(s)都是redefinition,可是我在specialfiledialog.h里面只有构造函数的声明才有上面六个变量的定义,这怎么会重复定义呢?
帮忙 谢谢~!!!
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL)
: CFileDialog(bOpenFileDialog,loszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
在实现的这个地方,把这些默认参数都去掉,
就是
CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog,LPCTSTR loszDefExt ,
LPCTSTR lpszFileName ,
DWORD dwFlags,
LPCTSTR lpszFilter ,
CWnd* pParentWnd )
: CFileDialog(bOpenFileDialog,loszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
还有一个小问题:就是为什么Classview看不见这个函数呢?我又把定义中的默认参数去掉就可以看到了我想知道是我代码的问题,还是VC的bug