2014-01-22 77 views
3

好吧,所以我一直在搜索這個在過去4個小時裏這個「多重定義第一次定義的問題」的每個論壇,我想我一定很愚蠢,但我可以似乎無法解決這個問題。只是另一個「多個定義第一次定義在這裏」的錯誤

我有以下文件:

​​

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中有函數的原因是我有一個定義的結構,並且Packet.h函數都在結構上運行。我真的很困惑我應該如何正確定義這些函數,所以我可以在其他cpp文件中使用它們,這可能是我的問題的一部分?

+2

你的標題中是否包含警衛? – fritzone

+1

如果你有頭文件中定義的函數,它們不是struct/class的成員函數,你需要'inline'。 –

+0

將您的代碼減少到完整的最小示例,並且仍然會重現問題,然後將其發佈到此處。 – Angew

回答

4

每種功能都Packet.h得到了多重定義錯誤

如果你打算在頭定義函數(類定義之外),你需要將它們標記inline。這放鬆了一個定義規則以允許多個翻譯單元中的定義。

您仍然只能在每個翻譯單元中使用一個定義,因此請確保標題包含警衛。

+0

非常感謝,這解決了Packet函數的多重定義問題。 Server.cpp中發生的其他多個定義錯誤是因爲靜態成員在頭文件中定義,並且當我將它們移動到cpp文件時,錯誤消失。 – user1419999