2017-02-10 113 views
-2

C++初學者在這裏。變量的多重定義

我正在寫一個簡單的程序,其在三個薄片分爲:

foo.h中(#包括所有需要的庫,所有的程序的變量和各個函數的聲明)

Foo.cpp中(#包括foo.h中,包含了foo.h功能定義)

main.cpp中(#包括當然foo.h中,並且包含主函數)

予編譯命令:克++ * CPP -o時間

我得到的錯誤是:

/tmp/cc0sNZgq.o:(.bss+0x0):VARIABLENAME的」多個定義對於在foo.h中聲明的每個變量,'。其次:

collect2:錯誤:LD返回1退出狀態

注:我已經把包含頭文件foo.h中後衛

我想有其中載有頭所有變量和函數聲明,以便main.cpp保持儘可能簡單和乾淨。

我在網上查找並找不到解決方案。

+1

您在頭文件中有變量的*定義*,而不僅僅是*聲明*。所以你的定義出現在兩個編譯文件中。 [請閱讀'extern'關鍵字。](http://en.cppreference.com/w/cpp/language/storage_duration),或者創建一個類的變量'static'成員。 – BoBTFish

+0

歡迎使用堆棧溢出。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –

回答

3

不要把你的變量放到頭文件中。這將意味着包含頭文件的每個.cpp文件都將擁有自己的變量副本。

如果要跨多個.cpp共享全局變量,則應聲明它們在一個.cpp中,並在頭文件中使用extern。但我建議不要使用全局變量,除非它是絕對必要的。

+0

謝謝你的回答。我應該把他們放在哪裏? ** foo.cpp **和** main.cpp **都需要它們。 – mdvlln

+0

把它們放在.cpp文件中,並在其他地方使用extern。 – Karthik

+0

好像'foo.h'和'foo.cpp'作爲一個單獨的組件一起使用,所以把'extern'的聲明放在'foo.h'中,並且'foo.cpp'中的定義放在一起。如果他們不是一個單一的組件,那麼給他們不同的名字! – BoBTFish