首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何初始化类内浮点常量?

如何初始化类内浮点常量?
EN

Stack Overflow用户
提问于 2012-02-03 06:32:14
回答 3查看 2.4K关注 0票数 2

我最近遇到了Visual C++ 2005无法在类常量中初始化的问题,因为我遇到了普遍存在的错误

"error C2864:...:在类中只能初始化静态常量整型数据成员“

从类似于

代码语言:javascript
运行
复制
class MyClass:
{
private:
   static const double myConstant = 2.9768;
}

我已经知道非整数类型是问题所在,有几种方法可以获得整数常量,但我还没有找到一种令人满意的解决方法来定义一个类范围内的常量。这种类型的声明在以后的/其他编译器中合法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-03 06:33:51

在类定义之外,在源文件(不是头文件)中执行此操作,否则可能会出现链接器错误。

const double MyClass::myConstant = ..;

这种行为是由C++语言标准强制执行的。没有法律上的解决办法。

票数 4
EN

Stack Overflow用户

发布于 2012-02-03 06:36:35

在C++03中,您必须在类定义之外初始化非整数静态常量:

代码语言:javascript
运行
复制
struct Foo
{
    static const double value;
};
const double Foo::value = 0.5;

在C++11中,您可以从常量表达式内联初始化任意constexpr会话:

代码语言:javascript
运行
复制
struct Foo
{
    static constexpr double value = 0.5;
};

您可能仍然需要为变量提供定义,也可能不需要,这取决于您是否在代码中的其他地方需要它(例如,通过获取它的地址)。

票数 8
EN

Stack Overflow用户

发布于 2012-02-03 06:33:37

从头文件中取出初始化,并将其放入.cpp中:

代码语言:javascript
运行
复制
const double MyClass::myConstant = 2.9768;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9121015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档