2014-02-05 54 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会在其他地方有所不同吗?