0

我正在尝试在 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:

我该如何解决这个问题?非常感谢您的帮助。谢谢你。

编辑。

删除该if (SaveFile (dlg.GetPathName ())行后,文件可以构建和运行,但是当我按下保存按钮时,没有文件被保存。

4

2 回答 2

1

它不是任何 MFC 或内部错误,而是您的编程错误。

当您在 .h 文件主体中声明该方法的任何方法时,该方法的主体应存在于 .cpp 文件中。否则它将给出在 .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 ();
    }
}
于 2013-05-13T11:51:00.753 回答
0

将此添加到您的 CPP 文件中:

BOOL CTESTDlg::SaveFile (LPCTSTR pszFile)
{
    // ... add your code that saves the information to the file here...

    return TRUE;
}

它仍然不会做任何事情(没有保存代码)但它会编译。

于 2013-05-13T13:25:53.833 回答