8

我有这样的代码:

class MyClass
{
   private:
     static const int intvalue= 50;
     static const float floatvalue = 0.07f;
 };

在 Visual Studio 2010 中,我收到此错误:

Myclasses.h(86): error C2864: 'MyClass::floatvalue : only static const integral data members can be initialized within a class

那么如何在c++中初始化一个静态常量float呢?

如果我使用构造函数,每次创建此类的对象时,都会初始化变量,这是不好的。

显然代码是在 Linux 上用 GCC 编译的。

4

3 回答 3

17

我的类.h

class MyClass
{
   private:
     static const int intvalue = 50; // can provide a value here (integral constant)
     static const float floatvalue; // canNOT provide a value here (not integral)
};

我的类.cpp

const int MyClass::intvalue; // no value (already provided in header)
const float MyClass::floatvalue = 0.07f; // value provided HERE

另外,关于

显然代码是在 Linux 上用 GCC 编译的。

这是由于扩展。尝试使用-std=c++98(或-std=c++03,或者-std=c++11如果您的版本足够新)这样的标志-pedantic,您将(正确地)得到一个错误。

于 2013-07-10T09:09:31.750 回答
1

试试下面的。

在头文件中,而不是您当前的语句写入:

static const float floatvalue;

在 CPP 文件中,写入:

const float MyClass::floatvalue = 0.07f;
于 2013-07-10T09:09:54.063 回答
0

您必须在类之外定义它们,如下所示:

const int MyClass::intvalue = 50;
const float MyClass::floatvalue = 0.07f;

当然,这不应该在标题中完成,否则您将收到多实例错误。使用ints,您可以使用 s 来伪造它们enum {intvalue = 50};,但这不适用于浮点数。

于 2013-07-10T09:09:19.590 回答