2013-03-21 38 views
-1

我試圖創建一個複數的類,並且想要創建虛數單元i爲常量。我希望能夠在包含類的任何代碼中使用它。例如:如何創建一個類的全局常量 - C++

#include "complex.h" 
complex c = 2*i; 

我試圖確定這種方式:static const complex i在complex.h在complex.cpp public:const complex complex::i = complex(0,1)下。但是當我在main.cpp的頂部寫代碼時,我得到了未聲明的變量錯誤。

我該怎麼做?

注意:我已經定義了=*運營商

+0

如何將'i'聲明爲'public'靜態常量數據成員? – timrau 2013-03-21 17:29:24

+0

當然,它是不確定的 - 你把它變成了私人的。 – 2013-03-21 17:31:32

+0

@CareyGregory無論是否私密都不會影響其是否被定義。實際上,訪問對名稱查找沒有影響。所有這一切意味着如果編譯器通過查找找到專用名稱(或重載解析解析爲專用函數),則會出現錯誤。 – 2013-03-21 17:59:53

回答

0

您聲明瞭complex::i,但您正在嘗試使用i。無論你的代碼更改爲

complex c = 2 * complex::i; 

或者創建一個全局常量i(注:這不是一個好主意,但你可以做它namspace內)。

+0

好的,那麼如何創建一個全局常量或者在命名空間內進行呢? – Moray 2013-03-21 17:32:12

+0

@ user2145816只需在標題內的命名空間範圍內使用'complex const i = complex :: i;'即可。 – 2013-03-21 17:33:30

2

complex.h聲明extern const complex i

如果您沒有聲明iextern它必須在每個使用它的編譯單元中定義。鏈接兩個這樣的編譯單元將產生重複的定義錯誤。

+4

我真的不建議有一個叫做'i'的全局對象。 – 2013-03-21 17:30:07

+0

我也沒有。不幸的是,OP沒有詢問全球對象的利弊,而是如何創建它們。 – Oswald 2013-03-21 17:32:31

+0

@Oswald實際上,在他的問題中,他問了一個名爲'i'的_member_變量,而不是全局變量。 – 2013-03-21 18:01:19