用向导生成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??????????????

解决方案 »

  1.   

    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。
      

  2.   

    UINT ThreadFun(LPVOID pParam)
    {
    while(1)
    {
    Beep(100, 100);
    Sleep(1000);
    }
    return 0;
    }
    你是写在头文件里面的吧,移到cpp文件里面就行了
      

  3.   

    我是写在cpp里的啊,还有没有别的可能?
      

  4.   

    编译通过连接错,一般是符号定义问题,把ThreadFun改个名字试试
      

  5.   

    UINT ThreadFun(LPVOID pParam)
    {
    while(1)
    {
    Beep(100, 100);
    Sleep(1000);
    }
    return 0;
    }
    申明为全局的,既放在.cpp的几个#include语句之后
      

  6.   

    声明
    static UINT ThreadFun(LPVOID pParam);调用
    AfxBeginThread((AFX_THREADPROC)ThreadFun, this, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
      

  7.   

    在ThdView.h文件中
      UINT ThreadFun(LPVOID pParam);
    在ThdView.cpp文件中
      UINT ThreadFun(LPVOID pParam)
    {
    while(1)
    {
    Beep(100, 100);
    Sleep(1000);
    }
    return 0;
    }
      

  8.   

    stdafx.h中
    UINT ThreadFun(LPVOID pParam);
    stdafx.cpp中
    UINT ThreadFun(LPVOID pParam)
    {
    while(1)
    {
    Beep(100, 100);
    Sleep(1000);
    }
    return 0;
    }