2014-02-05 82 views
0

我有一類,稱之爲myClass的已經PI存儲爲一個const浮動像這樣:靜態函數返回不變浮動

const float pi = 3.1415; 

和公共函數返回其值:

static float _pi() { return pi; }; 

時,我想通過調用它像這樣使用我的其他代碼這個PI號:

myClass::_pi 

我得到這個錯誤,我不真的明白了,爲什麼我不應該能夠返回這樣的值?以及如何使其按預期工作?

expression must have arithmetic or unscoped enum type 
+3

你忘了()的? – Ralara

+1

'float x = myClass :: _ pi();' – juanchopanza

+0

請注意您的下一個問題:在這裏張貼半行並且沒有用處,您需要張貼合理完整(並不意味着很長)的示例。 –

回答

1

首先,靜態成員函數無法訪問非靜態成員變量而沒有該類的實例。

const float pi = 3.1415;   // Non-static. Created upon instantiation 
static float _pi() { return pi; }; // Error. No access to instance. 

如果你想靜態調用的函數_pi那麼你也應該不斷pi靜態的。其次,在調用函數pi時,必須使用()(例如,

float x = myClass::_pi(); 

最後,你可以使用C++ 11 constexpr使pi_pi返回值編譯時間常數。這將導致編譯器在每個調用站點的編譯時插入常量。你也可以使用靜態表達_pi()斷言等

static constexpr float pi = 3.1415f;  // Use 'f' postfix for float literals. 
static constexpr float _pi() { return pi; } 

作品:

static_assert(myClass::_pi() == 3.1415f, "Uh-oh, wrong value."); 
0

只是spitballing但人有什麼符號,你在一個基本的數學喜歡的傾向爲const浮動PI或KPI或頭,而不是這個。 pi會在其他地方有所不同嗎?