3

さて、私は過去 4 時間、この「ここで最初に定義された複数の定義」の問題についてすべてのフォーラムを検索してきました。

次のファイルがあります。

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

main.cpp には、Server.cpp で定義されるいくつかの関数を宣言する Server.h のみが含まれます。
Server.cpp は Socket.cpp、FileHandlerOut.cpp、および Packet.h の関数を使用するため、ヘッダー ファイル Socket.h、Packet.h、および FileHandlerIn.h は Server.h に含まれています。他のヘッダー ファイルには、標準ライブラリ以外のものは含まれていません。

Server.cpp のすべての関数と Packet.h のすべての関数で、複数定義エラーが発生します。Packet.h 内に関数がある理由は、構造体が定義されており、Packet.h 関数はすべて構造体で動作するためです。これらの関数を正しく定義する方法について本当に混乱しているので、他の cpp ファイルで使用できます。これは私の問題の一部でしょうか?

4

1 に答える 1

5

のすべての関数でPacket.h多重定義エラーが発生します

ヘッダー (クラス定義の外) で関数を定義する場合は、それらをマークする必要がありますinline。これにより、1 つの定義規則が緩和され、複数の翻訳単位での定義が可能になります。

各翻訳単位で許可される定義は 1 つだけなので、ヘッダーにインクルード ガードがあることを確認してください。

于 2014-01-22T12:47:06.343 に答える