我照着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里面只有构造函数的声明才有上面六个变量的定义,这怎么会重复定义呢?
帮忙 谢谢~!!!

解决方案 »

  1.   

    重复include specialfiledialog.h文件了吧?
      

  2.   

    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)
    在实现的这个地方,把这些默认参数都去掉,
    就是
    CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog,LPCTSTR loszDefExt ,
                    LPCTSTR lpszFileName ,
                    DWORD dwFlags,
                    LPCTSTR lpszFilter ,
                    CWnd* pParentWnd )
    : CFileDialog(bOpenFileDialog,loszDefExt,lpszFileName,dwFlags,lpszFilter,pParentWnd)
      

  3.   

    不是重复引用的问题听了楼上 handsomerun(毛毛) 话把默认都去掉了。编译可以通过
    还有一个小问题:就是为什么Classview看不见这个函数呢?我又把定义中的默认参数去掉就可以看到了我想知道是我代码的问题,还是VC的bug
      

  4.   

    不知道是不是bug因为VC++技术内幕这书我也有我看了看上面的附书代码发现这个例子的classview 中也看不到这个构造函数