作者twindrive (柳仙斗)
看板C_and_CPP
標題[問題] C++要如何宣告?
時間Tue Feb 13 02:12:50 2018
開發平台(Platform): (Ex: Win10, Linux, ...)
Ubuntu 17.04
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
G++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
omp
問題(Question):
大家好,我試著把我的C的檔案改成C++來使用,但是因為我的變數是另外在.h檔裡面宣告
後,再在main裡面來使用,並且用 #include "xxxx.hpp" 給main和main下面的其他子程式
使用,原本C這樣做沒問題,但這時改成C++後問題就來了,如果我在xxxx.hpp裡面用C原
本的宣告方式,如下
double x,y,vx,vy,......;
int i,j,k,l,......;
double f[10][10],......;
編譯後顯示
initial.o:(.bss+0x0): multiple definition of `x'
main.o:(.bss+0x0): first defined here
initial.o:(.bss+0x8): multiple definition of `v'
main.o:(.bss+0x8): first defined here
.
.
.
collect2: error: ld returned 1 exit status
Makefile:15: recipe for target 'a.out' failed
make: *** [a.out] Error 1
而後我改用
class xxxx
{
//宣告變數
public:
.
.
.
}
雖然這樣會成功,但我必須要在每一個變數前面加上xxxx.
也就是說我必須要在每個子程式裡面寫成
xxxx test
test.f[ix][iv] = xxxx.x*xxxx.v
這樣的形式,每次都要打很多字母,其實有點麻煩,請問有沒有比較簡化的語法呢?
可以讓我即使是在一個檔案裡面宣告好參數,就可以在所有的檔案裡面使用,對於C++還
不是很熟,還請指點迷津,先謝謝大家。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.142.73.183
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1518459173.A.AC6.html
→ hakman: hpp 是啥 Orz 另外,不要在.h 檔裏面宣告變數 02/13 04:21
→ hakman: 你可以看看 extern 02/13 04:21
→ hakman: 另外,應該可以不用改吧 直接 extern "C" 可以用吧? 02/13 04:23
→ hakman: PS: extern 跟 extern "C" 請不要混淆一起看,兩者的建議 02/13 04:23
→ hakman: 是不同的事情 02/13 04:23
→ hakman: hpp 查到了,我孤陋寡聞,抱歉 Orz 02/13 04:25
推 LPH66: 這跟 extern "C" 無關, 是 C++ 的 ODR 規則的關係 02/13 06:56
→ LPH66: 這種多檔間的共享全域變數需要宣告為外部 (extern) 02/13 06:56
→ LPH66: 然後在其中一個 .cpp 當中實際宣告之 02/13 06:56
→ LPH66: 不過建議原 PO 考慮一下將這些全域變數做為函數的參數傳入 02/13 06:57
→ LPH66: 因為這其實是很危險的寫法, 變數誰改了都不知道 02/13 06:58
→ LPH66: (事實上不只 C++, 這種寫法也不建議 C 使用) 02/13 06:59
推 steve1012: 全域變數能免則免 02/13 07:11
推 peterwu4: namespace ? 02/13 10:23
→ loveflames: C有tentative definition,C++沒有 02/13 10:34
→ loveflames: C++不該在header去定義extern變數,宣告可以 02/13 10:35