情况是这样的 
    我建了一个基于mfc的win32 console project 测试工程TestPro 测试我的一个类NatTree 类中的m_pHead是 一个字定义的pItem结构体 声明在ProtocolDel.h中(这个头文件还包括一些其他的全局函数 如: check(); delay();的声明和实现) .
    我在NatTree.h中#include "ProtocolDel.h" 在工程TestPro.cpp文件中
#include "NatTree.h" 然后 NatTree NatTable=*new NatTree; 生成一个NatTree对象 编译 连接 抱错如下:
TestPro.obj : error LNK2005: "unsigned short __cdecl check(unsigned short *,int)" (?checksum@@YAGPAGH@Z) already defined in NatTree.obj
TestPro.obj : error LNK2005: "void __cdecl delay(unsigned long)" (?Delay@@YAXK@Z) already defined in NatTree.obj
这些都是我在ProtocolDel.h中声明并实现的函数(虽然这里没有用到) 请问是什么问题啊??? 解决马上给分!

解决方案 »

  1.   

    把check(),delay()函数的实现放到某个.cpp文件中,在你的ProtocolDel.h中使用extern声明一下!
      

  2.   

    这个编译信息是说没有找到check(); delay();函数的定义部分,只看到了他们的声明楼主再看看你的代码
      

  3.   

    随便放到哪个.cpp都可以么?
    比如我在Protocol.h中申明: extern check(unsigned short *,int);
    然后把check();函数的实现放到 NatTree.cpp中
    如果我的另一个类MsgQueue.cpp的实现也要用到pItem 那么是不是只要在#include"ProtocolDel.h"就可以了呢?
    你能告诉我上面出错的原因是什么吗? 谢谢!
      

  4.   

    会不会用过别的什么.CPP文件,所以出错了
      

  5.   

    之前是添加过其他一些.cpp文件 但是都删除了 现在工程里只有NatTree.cpp/.h
    ProtocolDel.h 还有就是工程本来的文件了 我觉得可以象我之前那样做啊!
      

  6.   

    随便放到哪个.cpp都可以么?
    比如我在Protocol.h中申明: extern check(unsigned short *,int);
    然后把check();函数的实现放到 NatTree.cpp中
    如果我的另一个类MsgQueue.cpp的实现也要用到pItem 那么是不是只要在#include"ProtocolDel.h"就可以了呢?
    你能告诉我上面出错的原因是什么吗? 谢谢!
      

  7.   

    找不到相应的文件定义,只有声明;需要有相应的函数(一般在CPP/C)或者是lib,如果你自己有这几个函数。把这个文件加到项目中,把它的头文件include到需要调用函数的文件中;如果是lib,把lib加到项目中就可以了