MFC C ++ LNK 2019错误

时间:2013-05-13 07:57:33

标签: c++ visual-studio-2010 mfc linker-errors

我正在尝试在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 ())行后,该文件可以构建并运行,但是当我按下保存按钮时,不保存任何文件。

2 个答案:

答案 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;
}

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