好的,所以我在过去的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文件中使用它们,这可能是我的问题的一部分?
答案 0 :(得分:5)
Packet.h
中的每个函数都会出现多重定义错误
如果要在标题中定义函数(在类定义之外),则需要将它们标记为inline
。这放宽了一个定义规则,允许在多个翻译单元中进行定义。
您仍然只允许在每个翻译单元中使用一个定义,因此请确保标题包含警戒。