【发布时间】:2015-06-06 13:24:38
【问题描述】:
链接过程中出现LNK2001错误:
- LNK2001: 未解析的外部符号“public: virtual struct CRuntimeClass * __thiscall CChildView::GetRuntimeClass(void)const” (?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()
但是在我的程序执行期间(如果未注释 implement_dynamicaly)它在 AfxWinMain 函数中失败就行了:
if (!pThread->InitInstance())
我的其他类没有明确定义它们并且它们没有错误。 这是这样的想法,但它对我没有帮助。 MFC dlg class link errors for MyClass::GetMessageMap() and MyClass::GetRuntimeClass (MSVC 2008)
【问题讨论】:
-
由于您使用的是
DECLARE_DYNAMIC,因此您需要IMPLEMENT_DYNAMIC。您的问题与链接无关。它与程序的运行时行为有关,您几乎没有提供任何相关信息。启动你的调试器。找出发生了什么。 -
你从
CDialog开车。但随后你在IMPLEMENT_DYNAMIC和BEGIN_MESSAGE_MAP中切换到CWnd。从您的声明来看,我不知道这是否意味着CDialog或CWnd或CView。暂时注释掉DECLARE_DYNAMIC。此外,您应该大致解释一下您所追求的视图模型类型(对话框或多文档视图或单文档......)
标签: c++ visual-c++ visual-studio-2013 mfc linker