Неразрешенный внешний символ — только в режиме деблокирования

Я использую Visual C++ 6, и мое приложение отлично строится и работает в режиме отладки, но я получаю эти две ошибки неразрешенного внешнего символа при попытке сборки в режиме выпуска:

OverUnderReportDoc.obj : error LNK2001: unresolved external symbol "public: virtual int     __thiscall COverUnderReportDoc::GenerateReport(void)" (? GenerateReport@COverUnderReportDoc@@UAEHXZ)

OverUnderReportDoc.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall COverUnderReportDoc::DoReport(void)" (?DoReport@COverUnderReportDoc@@UAE_NXZ)

COverUnderReportDoc — это класс, производный от CReportDoc, который является производным от CDocument, части платформы MFC.

Вот объявления функций:

public:

virtual int GenerateReport(void);
virtual bool DoReport(void);

И определения:

bool COverUnderReportDoc::DoReport(void)
{

// Instantiate the dialog
CCriteriaDlg dlg;
m_Report.BreakSpace(FALSE);

// Get a pointer to the window
CWnd* pWnd = AfxGetApp()->m_pMainWnd;

// When OK is clicked...
if (dlg.DoModal() == IDOK)
{       
    // Set the document title
    SetTitle("Inventory Over/Under");

    // Copy some values from the dialog to member variables

    GenerateReport();

    pWnd->ShowWindow(SW_MAXIMIZE);

}
else
{
            // If Cancel is clicked, close the program
    if(pWnd)
        pWnd->PostMessage(WM_CLOSE);
    return false;
}

return true;
}

int COverUnderReportDoc::GenerateReport(void)
{

// write the headers to the report
// if there was no problem
if (DoHeaders())
{
    // assemble the report data
    // if that went well
    if (ScanFile())
        // write the summary to the report
        DoSummary();
}
// return the document status
return m_nStatus;
}

Я действительно не уверен, как это решить, этих методов нет ни в одной библиотеке, и класс компилируется нормально, поэтому я не знаю, почему он не видит их при компоновке. У кого-нибудь есть идеи?

EDIT: Вот варианты моего проекта:

Параметры выпуска проекта:

(C/C++ вкладка Project Settings)

/nologo /Zp1 /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D   "_MBCS" /D "BTI_WIN_32" /FR"Release/" /Fo"Release/" /Fd"Release/" /FD /c 

(вкладка Link из Project Settings)

MYLIB.lib w3btrv7.lib VERSION.LIB /nologo /subsystem:windows /incremental:no /pdb:"Release/OverUnderReport.pdb" /machine:I386 /out:"Release/OverUnderReport.exe" 

Параметры отладки проекта:

(вкладка C/C++ из Project Settings)

/nologo /Zp1 /MDd /W3 /GX /ZI /Ot /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /D "BTI_WIN_32" /FR"Debug/" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c

(вкладка Link из Project Settings)

VERSION.LIB MYLIB.lib w3btrv7.lib /nologo /subsystem:windows /profile /debug /machine:I386 /out:"Debug/OverUnderReport.exe" 

person NobodyNothing    schedule 06.01.2012    source источник
comment
Обычно причиной того, что что-то не работает между сборками отладки и сборкой выпуска, являются настройки конфигурации и/или оптимизация компилятора. Также вы публично унаследовали от CReportDoc ? COverUnderReportDoc : public CReportDoc   -  person Joe    schedule 07.01.2012
comment
Да, COverUnderReportDoc публично наследуется от CReportDoc. Я также добавлю варианты своего проекта в исходный пост, так как я действительно не знаю, на что я смотрю с этими...   -  person NobodyNothing    schedule 07.01.2012
comment
Из любопытства, вы выполнили очистку, а затем сборку?   -  person hmjd    schedule 07.01.2012
comment
Да, но ошибка связывания остается.   -  person NobodyNothing    schedule 07.01.2012
comment
Проверьте, какие файлы .obj существуют в каталоге Debug, и сравните их с теми, которые существуют в каталоге Release. Существуют ли одинаковые файлы (они будут отличаться по размеру).   -  person hmjd    schedule 07.01.2012
comment
Всем .obj в папке Debug соответствует .obj в папке Release.   -  person NobodyNothing    schedule 07.01.2012
comment
Не могли бы вы опубликовать исходный файл, где определено bool COverUnderReportDoc::DoReport(void)?   -  person hmjd    schedule 07.01.2012


Ответы (1)


Строка №102 на pastebin.com/e1E0WcBT:

#ifdef _DEBUG

приводит к пропуску всех определений функций-членов с этой точки при построении в режиме выпуска.

person hmjd    schedule 06.01.2012
comment
Только что увидел это и исправил после того, как отправил в Pastebin, теперь все работает нормально. Спасибо за помощь! - person NobodyNothing; 07.01.2012