【发布时间】:2014-06-20 16:39:54
【问题描述】:
标题说明了一切,两种常用方法都行不通。我错过了什么?
1.
class Cl {
static constexpr double PI;
};
constexpr double Cl::PI = 3.14;
(26): 错误 C2737: 'private: static double const Cl::PI' : 'constexpr' 对象必须被初始化
2.
class Cl {
static constexpr double PI = 3.14;
};
(26): 错误 C2864: 'Cl::PI' : 静态 具有类内初始化程序的数据成员必须具有非易失性 const 整型
类型是'const double'
在这两次尝试中,错误都在类内的同一行。我正在使用 VisualStudio/MSVC 2013 年 11 月 CTP 编译器。
请注意,使变量const 不是解决方案,因为我想在 constexpr 函数和普通函数中都使用此常量。
【问题讨论】:
-
2.应该管用。但是放弃虚假的
:。 -
@juanchopanza 这是一个复制/粘贴错误。在我的代码中,
:之后有一个超类。 -
无论如何,2.应该可以工作。
-
有点离题,但
M_PI已在<cmath>中定义。 -
@Edward 是的,PI 只是一个例子。
标签: c++ visual-c++ c++11 visual-studio-2013 constexpr