[問題] C++要如何宣告?

看板C_and_CPP作者 (柳仙斗)時間7年前 (2018/02/13 02:12), 編輯推噓3(3014)
留言17則, 6人參與, 7年前最新討論串1/1
開發平台(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

02/13 04:21, 7年前 , 1F
hpp 是啥 Orz 另外,不要在.h 檔裏面宣告變數
02/13 04:21, 1F

02/13 04:21, 7年前 , 2F
你可以看看 extern
02/13 04:21, 2F

02/13 04:23, 7年前 , 3F
另外,應該可以不用改吧 直接 extern "C" 可以用吧?
02/13 04:23, 3F

02/13 04:23, 7年前 , 4F
PS: extern 跟 extern "C" 請不要混淆一起看,兩者的建議
02/13 04:23, 4F

02/13 04:23, 7年前 , 5F
是不同的事情
02/13 04:23, 5F

02/13 04:25, 7年前 , 6F
hpp 查到了,我孤陋寡聞,抱歉 Orz
02/13 04:25, 6F

02/13 06:56, 7年前 , 7F
這跟 extern "C" 無關, 是 C++ 的 ODR 規則的關係
02/13 06:56, 7F

02/13 06:56, 7年前 , 8F
這種多檔間的共享全域變數需要宣告為外部 (extern)
02/13 06:56, 8F

02/13 06:56, 7年前 , 9F
然後在其中一個 .cpp 當中實際宣告之
02/13 06:56, 9F

02/13 06:57, 7年前 , 10F
不過建議原 PO 考慮一下將這些全域變數做為函數的參數傳入
02/13 06:57, 10F

02/13 06:58, 7年前 , 11F
因為這其實是很危險的寫法, 變數誰改了都不知道
02/13 06:58, 11F

02/13 06:59, 7年前 , 12F
(事實上不只 C++, 這種寫法也不建議 C 使用)
02/13 06:59, 12F

02/13 07:11, 7年前 , 13F
全域變數能免則免
02/13 07:11, 13F

02/13 10:23, 7年前 , 14F
namespace ?
02/13 10:23, 14F

02/13 10:34, 7年前 , 15F
C有tentative definition,C++沒有
02/13 10:34, 15F

02/13 10:35, 7年前 , 16F
C++不該在header去定義extern變數,宣告可以
02/13 10:35, 16F

02/13 11:24, 7年前 , 17F
幫你找了一個範例 https://goo.gl/QfrByv
02/13 11:24, 17F
文章代碼(AID): #1QWTabh6 (C_and_CPP)