0

次の C++ コードに問題があります

VC++ を使用していますが、次の MFC ベースのプロジェクトをコンパイルしようとしています。

これはソース ファイルwinmfcproectum.cppです。

#include "stdafx.h"
#include "winmfcproectum.h"

// ExX112_021.CppPP
// An elementary MFC program

COurApp::COurApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

COurApp AnApplication;                     // Define an application object


// Function to create an instance of the main application window
BOOL COurApp::InitInstance()
{
  // AfxEnableControlContainer();

  // Construct a window object in the free store
  // m_pMainWnd = new COurWnd;
  // m_pMainWnd->ShowWindow(m_nCmdShow);     // ...and display it
  return TRUE;
}

これらはヘッダファイルです

stdafx.h

// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN        // Exclude rarely-used stuff from Windows headers

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#include <afxdisp.h>        // MFC Automation classes
#include <afxdtctl.h>       // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>         // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT


// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>


// TODO: reference additional headers your program requires here

およびwinmfcproectum.h

#ifndef _WINMFCPROECTUM_H
#define _WINMFCPROECTUM_H


#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__
    #error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h"       // main symbols



class COurWnd : public CFrameWnd
{
   public:
      // Constructor
      COurWnd()
      {
         Create(0, L"Our Dumb MFC Application");
      }
};


// Application class definition
class COurApp : public CWinApp
{
   public:
       COurApp();

   public:
      virtual BOOL InitInstance();



};


#endif

共有 DLL で MFC を使用して、空でない Win32 プロジェクトを作成しました。

resource.htargetver.hは自動的に作成されたので、ここには掲載しません。stdafx.hはプリコンパイルされている
ため、 stdafx.cppも自動的に作成されました。

今私の問題は、COurAppクラスがwinmfcproectum.cpp内で見えないように見えることですが、 winmfcproectum.hを含めたので、これらのコンストラクターと関数の実装、つまりCOurApp::COurApp()COurApp::InitInstance()にコメントすると、およびそれらの間の変数宣言、すべてがうまくコンパイルされます

コンパイル出力は次のとおりです。

Compiling...
winmfcproectum.cpp
Linking...
winmfcproectum.obj : error LNK2019: unresolved external symbol "public: __thiscall CWinApp::CWinApp(wchar_t const *)" (??0CWinApp@@QAE@PB_W@Z) referenced in function "public: __thiscall COurApp::COurApp(void)" (??0COurApp@@QAE@XZ)
winmfcproectum.obj : error LNK2001: unresolved external symbol "public: virtual class CDocument * __thiscall CWinApp::OpenDocumentFile(wchar_t const *)" (?OpenDocumentFile@CWinApp@@UAEPAVCDocument@@PB_W@Z)
winmfcproectum.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CWinApp::AddToRecentFileList(wchar_t const *)" (?AddToRecentFileList@CWinApp@@UAEXPB_W@Z)
winmfcproectum.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWinApp::DoMessageBox(wchar_t const *,unsigned int,unsigned int)" (?DoMessageBox@CWinApp@@UAEHPB_WII@Z)
winmfcproectum.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWinApp::OnDDECommand(wchar_t *)" (?OnDDECommand@CWinApp@@UAEHPA_W@Z)
C:\Documents and Settings\Mango\My Documents\Visual Studio 2008\Projects\winmfcproectum\Debug\winmfcproectum.exe : fatal error LNK1120: 5 unresolved externals
4

2 に答える 2

0

ああ、なるほど。私のプロジェクトと動作中のプロジェクトの唯一の違いは、正しく動作するプロジェクトの「文字セット」オプションフィールドに「マルチバイト文字セット」があり、プロジェクトの代わりに「ユニコード文字セット」があることです。したがって、上記のすべてのエラーは、Unicode文字セット用にコンパイルした結果です。

興味深いことに、どの関数にも文字列を渡さなくても、Unicode文字セット用にコンパイルすることはできませんが、たとえばここでは、Unicode文字セット用にコンパイルする場合は、文字列の前にLまたはgenericを付けることができると言われています。 _T()マクロ。少なくとも、VC ++でこれを試しましたが、成功しませんでした。

于 2013-03-23T23:09:48.487 に答える
0

リンカが MFC からクラスを見つけることができないと言っているので、正しい MFC ライブラリに対して本当にリンクする場合は、プロジェクトの設定を再確認する必要があります。

于 2013-03-23T21:21:50.553 に答える