3

好的,所以在过去的 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 中的函数,因此在 Server.h 中包含了头文件 Socket.h、Packet.h 和 FileHandlerIn.h。除标准库外,其他头文件均不包含任何其他内容。

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

4

1 回答 1

5

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

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

每个翻译单元中仍然只允许一个定义,因此请确保标题具有包含防护。

于 2014-01-22T12:47:06.343 回答