MFC 中遇到:无法解析的外部符号

简书成研 2014-04-15 09:54:33
最近初学MFC,遇到下面这个问题,请高人帮忙解释下:
这个是在XXXDlg.h 声明:

public:
static UINT WriteS(LPVOID pParam );
static UINT WriteY(LPVOID pParam);


下面是XXXDlg.cpp实现
声明如下:
static UINT WriteS(LPVOID pParam )
{
CEdit *cEdit = (CEdit*)pParam;

for (int i =0; i<10; i++)
{
sy_str ="S";
cEdit->SetWindowTextW(_T("S"));;

Sleep(1000);
}
WriteSY.SetEvent();
return 0;
}
static UINT WriteY(PVOID pParam)
{
CEdit *cEdit = (CEdit*)pParam;

WaitForSingleObject(WriteSY,INFINITE);

for (int i =0; i<10; i++)
{
sy_str ="Y";
cEdit->SetWindowTextW(_T("S"));;

Sleep(1000);
}
WriteSY.SetEvent();
return 0;
}


我在点击按钮控件,做了创建线程,然后显示:
void CCeventThreadDlg::OnBnClickedButton1()
{

// TODO: 在此添加控件通知处理程序代码
CWinThread *pWriteS=AfxBeginThread(WriteS,
&C_EditS,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteS->ResumeThread();
CWinThread *pWriteY=AfxBeginThread(WriteY,
&C_EditY,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
pWriteY->ResumeThread();
}


我在编译的时候遇到如下问题:
CeventThreadDlg.obj : error LNK2019: 无法解析的外部符号 "public: static unsigned int __cdecl CCeventThreadDlg::WriteY(void *)" (?WriteY@CCeventThreadDlg@@SAIPAX@Z),该符号在函数 "public: void __thiscall CCeventThreadDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CCeventThreadDlg@@QAEXXZ) 中被引用
1>CeventThreadDlg.obj : error LNK2019: 无法解析的外部符号 "public: static unsigned int __cdecl CCeventThreadDlg::WriteS(void *)" (?WriteS@CCeventThreadDlg@@SAIPAX@Z),该符号在函数 "public: void __thiscall CCeventThreadDlg::OnBnClickedButton1(void)" (?OnBnClickedButton1@CCeventThreadDlg@@QAEXXZ) 中被引用
1>E:\code\MFC\CeventThread\Debug\CeventThread.exe : fatal error LNK1120: 2 个无法解析的外部命令
1>
1>生成失败。


是什么问题造成的呢?声明和实现是都有的?麻烦解释下,谢谢!
...全文
865 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
简书成研 2014-04-15
  • 打赏
  • 举报
回复
谢谢各位意见了,已经解决了,真心表示感谢 worldy 和ouyh12345 。
ouyh12345 2014-04-15
  • 打赏
  • 举报
回复
在函数里前加CCeventThreadDlg:: 如: UINT CCeventThreadDlg::WriteS(LPVOID pParam ) { ... }
worldy 2014-04-15
  • 打赏
  • 举报
回复
WriteY ==> static UINT xxxClass::WriteY(PVOID pParam) { CEdit *cEdit = (CEdit*)pParam; WaitForSingleObject(WriteSY,INFINITE); for (int i =0; i<10; i++) { sy_str ="Y"; cEdit->SetWindowTextW(_T("S"));; Sleep(1000); } WriteSY.SetEvent(); return 0; }
worldy 2014-04-15
  • 打赏
  • 举报
回复
看起来lz的函数是类成员函数,类成员函数定义必须加上类名称 WriteY ==> static UINT xxxClass::WriteY(PVOID pParam)

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧