none
error LNK2001: unresolved external symbol "public: __thiscall CCRDBSDlg::CCRDBSDlg(class CWnd *)" 请问这个问题怎么解决? RRS feed

  • 问题

  • 请问这个问题怎么解决?

    CRDBS.obj : error LNK2001: unresolved external symbol "public: __thiscall CCRDBSDlg::CCRDBSDlg(class CWnd *)" (??0CCRDBSDlg@@QAE@PAVCWnd@@@Z)
    Debug/CRDBS.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.

    2010年10月15日 3:20

答案

  • 这个是CRDBS.obj在链接的时候无法找到CCRDBSDlg的构造函数的实现。 1 保证CCRDBSDlg所在的cpp可以编译通过 2保证CRDBS.cpp和1中的cpp在一个solution中。
    麻烦把正确答案设为解答。
    2010年10月15日 7:01
    版主

全部回复

  • 以下是CCRDBSDlg.cpp的代码:

    #include "stdafx.h"
    #include "CRDBS.h"
    #include "CRDBSDlg.h"

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif

    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg dialog used for App About

    class CAboutDlg : public CDialog
    {
    public:
     CAboutDlg();

    // Dialog Data
     //{{AFX_DATA(CAboutDlg)
     enum { IDD = IDD_ABOUTBOX };
     //}}AFX_DATA

     // ClassWizard generated virtual function overrides
     //{{AFX_VIRTUAL(CAboutDlg)
     protected:
     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
     //}}AFX_VIRTUAL

    // Implementation
    protected:
     //{{AFX_MSG(CAboutDlg)
     //}}AFX_MSG
     DECLARE_MESSAGE_MAP()
    };

    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
     //{{AFX_DATA_INIT(CAboutDlg)
     //}}AFX_DATA_INIT
    }

    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
     CDialog::DoDataExchange(pDX);
     //{{AFX_DATA_MAP(CAboutDlg)
     //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
     //{{AFX_MSG_MAP(CAboutDlg)
      // No message handlers
     //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CCRDBSDlg dialog

    CCRDBSDlg::CCRDBSDlg(CWnd* pParent /*=NULL*/)
     : CDialog(CCRDBSDlg::IDD, pParent)
    {
     //{{AFX_DATA_INIT(CCRDBSDlg)
      // NOTE: the ClassWizard will add member initialization here
     //}}AFX_DATA_INIT
     // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CCRDBSDlg::DoDataExchange(CDataExchange* pDX)
    {
     CDialog::DoDataExchange(pDX);
     //{{AFX_DATA_MAP(CCRDBSDlg)
      // NOTE: the ClassWizard will add DDX and DDV calls here
     //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CCRDBSDlg, CDialog)
     //{{AFX_MSG_MAP(CCRDBSDlg)
     ON_WM_SYSCOMMAND()
     ON_WM_PAINT()
     ON_WM_QUERYDRAGICON()
     //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CCRDBSDlg message handlers

    BOOL CCRDBSDlg::OnInitDialog()
    {
     CDialog::OnInitDialog();

     // Add "About..." menu item to system menu.

     // IDM_ABOUTBOX must be in the system command range.
     ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
     ASSERT(IDM_ABOUTBOX < 0xF000);

     CMenu* pSysMenu = GetSystemMenu(FALSE);
     if (pSysMenu != NULL)
     {
      CString strAboutMenu;
      strAboutMenu.LoadString(IDS_ABOUTBOX);
      if (!strAboutMenu.IsEmpty())
      {
       pSysMenu->AppendMenu(MF_SEPARATOR);
       pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
      }
     }

     // Set the icon for this dialog.  The framework does this automatically
     //  when the application's main window is not a dialog
     SetIcon(m_hIcon, TRUE);   // Set big icon
     SetIcon(m_hIcon, FALSE);  // Set small icon
     
     // TODO: Add extra initialization here
     
     return TRUE;  // return TRUE  unless you set the focus to a control
    }

    void CCRDBSDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
     if ((nID & 0xFFF0) == IDM_ABOUTBOX)
     {
      CAboutDlg dlgAbout;
      dlgAbout.DoModal();
     }
     else
     {
      CDialog::OnSysCommand(nID, lParam);
     }
    }

    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.

    void CCRDBSDlg::OnPaint()
    {
     if (IsIconic())
     {
      CPaintDC dc(this); // device context for painting

      SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

      // Center icon in client rectangle
      int cxIcon = GetSystemMetrics(SM_CXICON);
      int cyIcon = GetSystemMetrics(SM_CYICON);
      CRect rect;
      GetClientRect(&rect);
      int x = (rect.Width() - cxIcon + 1) / 2;
      int y = (rect.Height() - cyIcon + 1) / 2;

      // Draw the icon
      dc.DrawIcon(x, y, m_hIcon);
     }
     else
     {
      CDialog::OnPaint();
     }
    }

    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CCRDBSDlg::OnQueryDragIcon()
    {
     return (HCURSOR) m_hIcon;
    }

    2010年10月15日 3:24
  • 这个是CRDBS.obj在链接的时候无法找到CCRDBSDlg的构造函数的实现。 1 保证CCRDBSDlg所在的cpp可以编译通过 2保证CRDBS.cpp和1中的cpp在一个solution中。
    麻烦把正确答案设为解答。
    2010年10月15日 7:01
    版主