莫名其妙的小错误 请帮忙

Runn 2002-11-04 09:58:08
用向导生成SDI界面,工程名Thd,然后进行以下两步:
1。添加一个线程函数:

UINT ThreadFun(LPVOID pParam)
{
while(1)
{
Beep(100, 100);
Sleep(1000);
}
return 0;
}

2。重载OnInitialUpdate()
void CThdView::OnInitialUpdate()
{
AfxBeginThread(ThreadFun, NULL);
CView::OnInitialUpdate();
}

??编译通过,连接时出错如下
Linking...
MainFrm.obj : error LNK2005: "unsigned int __cdecl ThreadFun(void *)" (?ThreadFun@@YAIPAX@Z) already defined in Thd.obj
ThdDoc.obj : error LNK2005: "unsigned int __cdecl ThreadFun(void *)" (?ThreadFun@@YAIPAX@Z) already defined in Thd.obj
ThdView.obj : error LNK2005: "unsigned int __cdecl ThreadFun(void *)" (?ThreadFun@@YAIPAX@Z) already defined in Thd.obj
Debug/Thd.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

why??????????????
...全文
97 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmm1122 2002-11-07
  • 打赏
  • 举报
回复
stdafx.h中
UINT ThreadFun(LPVOID pParam);
stdafx.cpp中
UINT ThreadFun(LPVOID pParam)
{
while(1)
{
Beep(100, 100);
Sleep(1000);
}
return 0;
}
wuzhouqun 2002-11-07
  • 打赏
  • 举报
回复
在ThdView.h文件中
UINT ThreadFun(LPVOID pParam);
在ThdView.cpp文件中
UINT ThreadFun(LPVOID pParam)
{
while(1)
{
Beep(100, 100);
Sleep(1000);
}
return 0;
}
Hanzo 2002-11-07
  • 打赏
  • 举报
回复
try to rebuild all
ahalf 2002-11-05
  • 打赏
  • 举报
回复
编译通过连接错,一般是符号定义问题,把ThreadFun改个名字试试
Runn 2002-11-05
  • 打赏
  • 举报
回复
我是写在cpp里的啊,还有没有别的可能?
lkcowboy 2002-11-05
  • 打赏
  • 举报
回复
试试Kevin_qing() 的方法
xkak2 2002-11-05
  • 打赏
  • 举报
回复
声明
static UINT ThreadFun(LPVOID pParam);

调用
AfxBeginThread((AFX_THREADPROC)ThreadFun, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
_liang_ 2002-11-05
  • 打赏
  • 举报
回复
UINT ThreadFun(LPVOID pParam)
{
while(1)
{
Beep(100, 100);
Sleep(1000);
}
return 0;
}
申明为全局的,既放在.cpp的几个#include语句之后
lightrain 2002-11-05
  • 打赏
  • 举报
回复
要在头文件里申明一下

demonking 2002-11-05
  • 打赏
  • 举报
回复
那个线程函数要是静态的!!
NowCan 2002-11-05
  • 打赏
  • 举报
回复
你include那个CPP文件了?
qing_li73 2002-11-04
  • 打赏
  • 举报
回复
surely, check ur code
wuxuan 2002-11-04
  • 打赏
  • 举报
回复
Visual C++ 概念:生成 C/C++ 程序

链接器工具错误 LNK2005在对象中已定义符号

以修饰形式显示的给定 symbol 被多次定义。

可能的原因

不慎同时与单线程库和多线程库链接。确保应用程序项目文件只包括适当的库,并且任何第三方库已适当创建了单线程或多线程版本。
该符号为封装函数(通过用 /Gy 编译创建),包含在多个文件中,但在各编译间已改变。重新编译所有包含 symbol 的文件。
以不同的形式在不同库中的两个成员对象中定义了该符号,并且使用了这两个成员对象。
某个绝对符号被定义两次,而每次定义的值不同。
头文件声明并定义了变量。可能的解决方案有:
在 .h 中声明变量:extern BOOL MyBool;,然后在 .c 或 .cpp 文件中向它分配:BOOL MyBool = FALSE;。
将变量声明为 Static。
将变量声明为 selectany。
当将 uuid.lib 与定义 GUID 的其他 .lib 文件(例如 oledb.lib 和 adsiid.lib)一起使用时。例如:
oledb.lib(oledb_i.obj) : error LNK2005: _IID_ITransactionObject
already defined in uuid.lib(go7.obj)
若要修复,请将 /FORCE:MULTIPLE 添加到链接器命令行选项,并确保 uuid.lib 是引用的第一个库。

有关更多信息,请参阅知识库文章:

Q148652,PRB: LNK2005 Errors When Link C Run-Time Libraries Are Linked Before MFC Libraries。
Q140440,FIX: Global Overloaded Delete Operator Causes LNK2005。
Q184235,PRB: LNK2005 Errors on New and Delete When Defining _ATL_MIN_CRT。
该错误之后为致命错误 LNK1169。

Kevin_qing 2002-11-04
  • 打赏
  • 举报
回复
UINT ThreadFun(LPVOID pParam)
{
while(1)
{
Beep(100, 100);
Sleep(1000);
}
return 0;
}


你是写在头文件里面的吧,移到cpp文件里面就行了

15,471

社区成员

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

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