我需要在类的所有成员函数中使用一个CFileDialog对象。因此,我将类的头写为:
#pragma once
#include <string.h>
#include "afxdlgs.h"
#include "gdal_priv.h"
#include "cpl_conv.h"
#include "cpl_string.h"
#include "ogr_spatialref.h"
class FilesWorkFlow
{
public:
FilesWorkFlow(void);
virtual ~FilesWorkFlow(void);
CString GetPath();
GDALDataset* OpenTiff(CString);
private:
wchar_t* lpszFilter;
CFileDialog dlgFile;
}; 并以以下形式实现了类的构造函数:
FilesWorkFlow::FilesWorkFlow(void)
{
lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
_T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");
dlgFile = CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
} 但是在构造函数中,我得到了错误:
no default constructor exists for class CFileDialog 有什么问题吗?
问题解决了。我用这种方式实现了这门课。
FilesWorkFlow.h
class FilesWorkFlow
{
public:
FilesWorkFlow(void);
virtual ~FilesWorkFlow(void);
CString GetPath();
GDALDataset* OpenTiff(CString);
private:
wchar_t* lpszFilter;
CFileDialog* dlgFile;
}; FilesWorkFlow.cpp
FilesWorkFlow::FilesWorkFlow(void)
{
lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
_T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");
dlgFile = new CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
}
FilesWorkFlow::~FilesWorkFlow(void)
{
}
CString FilesWorkFlow::GetPath()
{
if (dlgFile->DoModal() == IDOK)
{
CString pathname = dlgFile->GetPathName();
return pathname;
}
}发布于 2013-07-29 10:36:36
要专门化CFileDialog,通常要从它派生,而不是使它成为类成员。但是,不管您做什么,解决方案都是通过初始化程序列表初始化CFileDialog对象。您的构造函数应该如下所示:
FilesWorkFlow::FilesWorkFlow(void) :
dlgFile( true, 0, 0,
OFN_ENABLESIENABLESIZING | OFN_HIDEREADONLY,
_T("JPEG Files (*.jpg)|*.jpg|TIFF Files (*.tif)|*.tif|PNG Files (*.png)|*.png|Bitmap Files (*.bmp)|*.bmp||"),
0, 0, true )
{
}发布于 2013-07-29 08:38:44
试试这个:
FilesWorkFlow::FilesWorkFlow(void)
{
lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
_T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");
CFileDialog *dlgFile = new CFileDialog(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
...
delete dlgfile ;
}或
FilesWorkFlow::FilesWorkFlow(void)
{
lpszFilter = _T("JPEG Files (*.jpg)|*.jpg|")
_T("TIFF Files (*.tif)|*.tif|")_T("PNG Files (*.png)|*.png|")_T("Bitmap Files (*.bmp)|*.bmp|");
CFileDialog dlgFile(true,0,0,OFN_ENABLESIZING | OFN_HIDEREADONLY,lpszFilter,0,0,true);
...
}https://stackoverflow.com/questions/17918423
复制相似问题