我正在尝试在MFC应用程序中使用“文件另存为”编程代码。
在我的TestDlg.h头文件中
public:
BOOL SaveFile (LPCTSTR pszFile);
CString m_strPathName;
在我的TestDlg.cpp CPP文件中,我有
void CTESTDlg::OnSaveFile()
{
TCHAR szFilters[] =
_T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦");
CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"),
OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, szFilters);
if (dlg.DoModal () == IDOK)
{
if (SaveFile (dlg.GetPathName ()))
m_strPathName = dlg.GetPathName ();
}
}
在此之后,我构建了我的解决方案并得到了这个错误。
LNK2019:未解析的外部符号“public:int __thiscall CTESTDlg :: SaveFile(wchar_t const *)”(?SaveFile @ CTESTDlg @@ QAEHPB_W @ Z)在函数“public:
中引用我如何解决这个问题?非常感谢帮助。 谢谢。
EDIT。
删除if (SaveFile (dlg.GetPathName ())
行后,该文件可以构建并运行,但是当我按下保存按钮时,不保存任何文件。
答案 0 :(得分:1)
它的编程错误不是任何MFC或内部错误。
当你在.h文件中声明该方法的任何方法时,该方法的主体应该存在于.cpp file.else中,它会在.obj文件中找不到函数的链接错误。 所以你的解决方案就是在.h和.cpp文件中使用相同的功能,比如 在.h文件中,
public:
BOOL SaveFile (LPCTSTR pszFile);
CString m_strPathName;'
并在.cpp文件中,
void CTESTDlg::OnSaveFile(LPCTSTR pszFile)
{
TCHAR szFilters[] =
_T ("Text files (*.txt)¦*.txt¦All files (*.*)¦*.*¦¦");
CFileDialog dlg (FALSE, _T ("txt"), _T ("*.txt"),
OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, szFilters);
if (dlg.DoModal () == IDOK)
{
if (SaveFile (dlg.GetPathName ()))
m_strPathName = dlg.GetPathName ();
}
}
答案 1 :(得分:0)
将此添加到您的CPP文件中:
BOOL CTESTDlg::SaveFile (LPCTSTR pszFile)
{
// ... add your code that saves the information to the file here...
return TRUE;
}
它仍然不会做任何事情(没有保存代码)但它会编译。