我用VC6作了一个程序,第一次编译时显示10个错误:Linking...
billboard.obj : error LNK2005: "int  g_iNextFile" (?g_iNextFile@@3HA) already defined in FangMp3.obj
billboard.obj : error LNK2005: "int  g_iNumFiles" (?g_iNumFiles@@3HA) already defined in FangMp3.obj
billboard.obj : error LNK2005: "char const * *  pstrFiles" (?pstrFiles@@3PAPBDA) already defined in FangMp3.obj
billboard.obj : error LNK2005: "struct IBaseFilter *  g_pSourceNext" (?g_pSourceNext@@3PAUIBaseFilter@@A) already defined in FangMp3.obj
billboard.obj : error LNK2005: "struct IBaseFilter *  g_pSourceCurrent" (?g_pSourceCurrent@@3PAUIBaseFilter@@A) already defined in FangMp3.obj
billboard.obj : error LNK2005: "struct IMediaSeeking *  g_pMediaSeeking" (?g_pMediaSeeking@@3PAUIMediaSeeking@@A) already defined in FangMp3.obj
billboard.obj : error LNK2005: "struct IMediaControl *  g_pMediaControl" (?g_pMediaControl@@3PAUIMediaControl@@A) already defined in FangMp3.obj
billboard.obj : error LNK2005: "struct IGraphBuilder *  g_pGraphBuilder" (?g_pGraphBuilder@@3PAUIGraphBuilder@@A) already defined in FangMp3.obj
billboard.obj : error LNK2005: "struct HWND__ *  g_hwndApp" (?g_hwndApp@@3PAUHWND__@@A) already defined in FangMp3.obj
billboard.obj : error LNK2005: "char *  g_szCurrentFile" (?g_szCurrentFile@@3PADA) already defined in FangMp3.obj//billboard是主cpp文件然后在不做任何改动的情况下,再编译一次,就成了0个错误,可以正常执行程序,而且我想要实现的功能也正确实现了,请高手帮我看看这是为什么?多谢!

解决方案 »

  1.   

    我估计:第一次编译时,你在.H或.cpp文件中定义的某个常量或函数与已知的某一个连接的库文件定义的常量或函数有冲突,即在源代码级别上有问题
    第二次编译时,由于没有对工程做任何改动,那么VC就默认连接多个.obj文件,那么由于.obj文件没有问题,即在二进制级别上没有问题,故连接通过
      

  2.   

    是不是第二次编译时用了rebuild all ?
      

  3.   


    回复icelight :第二次我没用 rebuild all ,实际上,如果用的话,肯定
    还会出现10个错;回复demetry:我觉得您说的挺有道理,但我现在更认为是我的电脑中病毒了,
    因为当我关机再开机后,再编译就没错了(指的是把原来编译好的debug文件夹
    删除,重新编译),所以我觉得是中了某种病毒了。
    还有一种可能:在我发现问题之前,我对我的程序不断的修改,运行,调试,
    加上了许多代码,函数,而对于程序结束时该做的清理工作都没做,因此在
    执行完并关闭程序后,程序仍在部分执行,多次累加导致那样的结果,而编译器
    在编译完显示错误的同时,“帮我”关闭了还在执行的那部分程序。以上这些是我
    通过回忆再加上瞎猜得出的结论。
    不过现在问题是没了。