MFC С++ LNK 2019 ОШИБКА

Я пытаюсь использовать программный код «Файл Сохранить как» внутри приложения MFC.

в моем заголовочном файле TestDlg.h у меня есть

public:
    BOOL SaveFile (LPCTSTR pszFile);
    CString m_strPathName;

И в моем файле CPP TestDlg.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:

Как мне это решить?? Помощь очень ценится. Спасибо.

РЕДАКТИРОВАТЬ.

После удаления строки if (SaveFile (dlg.GetPathName ()) файл может быть создан и запущен, но когда я нажимаю кнопку сохранения, файл не сохраняется.


person Ashton    schedule 13.05.2013    source источник
comment
Вы внедрили SaveFile? Вы компилируете cpp?   -  person Luchian Grigore    schedule 13.05.2013
comment
@LuchianGrigore SaveFile реализован внутри файла заголовка.   -  person Ashton    schedule 13.05.2013
comment
Можете ли вы показать больше кода? В идеале это должен быть короткий самодостаточный пример, который демонстрирует вашу проблему и который другие люди могли бы попробовать создать.   -  person simonc    schedule 13.05.2013
comment
BOOL SaveFile (LPCTSTR pszFile); - это не реализация.   -  person Alex F    schedule 13.05.2013


Ответы (2)


Это не какая-либо 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 ();
    }
}
person Santosh Dhanawade    schedule 13.05.2013

Добавьте это в свой файл CPP:

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

    return TRUE;
}

Он по-прежнему ничего не сделает (нет кода сохранения), но скомпилируется.

person snowdude    schedule 13.05.2013