2015-06-06 110 views
0

在鏈接LNK2001錯誤的proccess情況:如何擺脫mfc鏈接錯誤?

  • LNK2001:無法解析的外部符號 「市民:虛擬結構的CRuntimeClass * __thiscall CChildView :: GetRuntimeClass(無效)常量」?(GetRuntimeClass @ CChildView @@ UBEPAUCRuntimeClass @@ XZ)

這是爲什麼?

這裏是頭中的相關代碼:

class CChildView :public CDialog 
{ 

    DECLARE_DYNAMIC(CChildView) 

public: 

    CChildView(); 
    ~CChildView(); 
    afx_msg void OnPaint(); 
    afx_msg void OnLevelProf(); 
    afx_msg void OnLevelAmat(); 
    afx_msg void OnLevelBeg(); 
    afx_msg void OnStepC(); 
    void new_game(); 
    //void CloseWindow(); 
    BOOL PreCreateWindow(CREATESTRUCT& cs); 
    int end_analyze(); 
    void ii(); 
    unsigned long calculate(int id, int x, int y); 
    afx_msg void OnNewGame(); 
    //void Invalidate(); 
    afx_msg void OnX1010(); 
    afx_msg void OnX1919(); 
    afx_msg void OnX3030(); 
    afx_msg void OnX5050(); 
    afx_msg void OnX100100(); 
    //MessageBoxW(); 
    void resize_window(); 
    afx_msg void OnLButtonDown(UINT, CPoint xy); 
    //void GetWindowRect(RECT); 
    //int MessageBoxW(); 
    void OnStepH(); 
    void set_chеcked_menu(unsigned int old_id, unsigned int new_id); 
    DECLARE_MESSAGE_MAP() 
}; 

和.cpp文件的一部分:

//IMPLEMENT_DYNAMIC(CChildView, CWnd)//!without this - doesn`t compiles. With - //runtime failure 
BEGIN_MESSAGE_MAP(CChildView, CWnd) 
    ON_WM_PAINT() 
    ON_WM_LBUTTONDOWN() 
    ..... 
    END_MESSAGE_MAP() 

但我PROGRAMM的執行過程中(如果implement_dynamicaly是取消註釋)失敗在線上的AfxWinMain函數:

if (!pThread->InitInstance()) 

我的其他類沒有明確定義他們和他們沒有錯誤。 這是一個這樣的想法,但它並沒有幫助我。 MFC dlg class link errors for MyClass::GetMessageMap() and MyClass::GetRuntimeClass (MSVC 2008)

+2

由於您使用'DECLARE_DYNAMIC',因此您需要'IMPLEMENT_DYNAMIC'。你的問題不是關於鏈接。這是關於程序的運行時行爲,並且您沒有提供有關該信息的信息。啓動您的調試器。找出發生了什麼事。 –

+0

你從'CDialog'開車。但是你在'IMPLEMENT_DYNAMIC'和'BEGIN_MESSAGE_MAP'中切換到'CWnd'。從你的聲明的外觀來看,我不知道這是否是CDialog或CWnd或CView。暫時註釋'DECLARE_DYNAMIC'。你也應該大致解釋你是在什麼樣的視圖模型之後(對話框或多文檔視圖或單文檔...) –

回答

1

您註釋掉了IMPLEMENT_DYNAMIC(CChildView,CWnd)行。

您需要註釋掉CChildView類中的DECLARE_DYNAMIC()宏,或取消註釋IMPLEMENT_DYNAMIC - 它們必須與您的類的CRuntimeClass相關。另外,如果您取消註釋IMPLEMENT_DYNAMIC,則應確保宏中的基類與您從中派生的類相匹配。 IOW,它應該說CDialog而不是CWnd。另外,您的BEGIN_MESSAGE_MAP()也會遇到同樣的問題。