只是另一个“此处首次定义的多重定义”错误

时间:2014-01-22 12:42:29

标签: c++ include multiple-definition-error

好的,所以我在过去的4个小时里一直在搜索这个“首次定义的多重定义”问题的每个论坛,我想我一定是非常愚蠢的,但我似乎无法解决这个问题。

我有以下文件:

main.cpp
Socket.h
Socket.cpp
Server.h
Server.cpp
Packet.h
FileHandlerIn.h
FileHandlerOut.cpp

main.cpp仅包含Server.h,它声明了一些函数,然后在Server.cpp中定义 Server.cpp使用Socket.cpp,FileHandlerOut.cpp和Packet.h中的函数,因此头文件Socket.h,Packet.h和FileHandlerIn.h包含在Server.h中。其他头文件都不包含除标准库之外的任何内容。

Server.cpp中的每个函数和Packet.h中的每个函数都会出现多重定义错误。我在Packet.h中有函数的原因是我定义了一个struct,而Packet.h函数都在struct上运行。我真的很困惑我应该如何正确定义这些函数,所以我可以在其他cpp文件中使用它们,这可能是我的问题的一部分?

1 个答案:

答案 0 :(得分:5)

  

Packet.h中的每个函数都会出现多重定义错误

如果要在标题中定义函数(在类定义之外),则需要将它们标记为inline。这放宽了一个定义规则,允许在多个翻译单元中进行定义。

您仍然只允许在每个翻译单元中使用一个定义,因此请确保标题包含警戒。