我有一个类,称之为myClass,其中pi存储为const float,如下所示:
const float pi = 3.1415;
和一个返回其值的公共函数:
static float _pi() { return pi; };
当我想在我的其他代码中使用这个pi号时,通过这样调用它:
myClass::_pi
我得到了这个我不太懂的错误,为什么我不能返回这样的值?以及如何使其按预期工作?
expression must have arithmetic or unscoped enum type
答案 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.");
答案 1 :(得分:0)
只是spitballing但人们倾向于在一个基本的数学标题而不是这个中浮动pi或kPI或任何你喜欢的符号。 pi会在其他地方变得不同吗?