相同类型的c ++类成员

时间:2011-09-10 20:17:11

标签: c++ class-design

我有以下情况:

class Foo
{
public:
  static const Foo memberOfFoo;

  ........
}

所以问题是我无法在我声明它的同一行初始化它,并且我无法通过构造函数中的Initializations List初始化它,有人知道该怎么做吗?

3 个答案:

答案 0 :(得分:6)

然后把它放在类定义之外:

const Foo Foo::memberOfFoo = whateverValue;

这是Foo::memberOfFoo的定义,它可以提供初始值并且必须进入.cpp文件(就像对象的任何其他定义一样,它只能在整个程序中出现一次,否则你会得到链接器错误)。

有时您会发现没有静态数据成员定义的代码:

struct A {
  // sometimes, code won't have an "const int A::x;" anywhere!
  static const int x = 42;
};

仅当A::x永远不会被寻址并且永远不会传递给参考参数时,省略这样的定义才有效。一种更正式的方式来说明省略定义何时有效:“当所有使用A :: x时立即读取A :: x的存储值”。许多静态整数常量就是这种情况。

答案 1 :(得分:2)

除了常量整数类型之外的类静态需要/可以在定义时初始化。你需要通过添加

在某处声明你的(不是那样)memberOfFoo
const Foo Foo::memberOfFoo = /*construct here*/;

答案 2 :(得分:0)

这是你实现初始化的方法......

class Foo
{
public:
    static const Foo memberOfFoo;

    Foo(int, double)
    {
        ...
    };
};

const Foo Foo::memberOfFoo(42, 3.141592654);

...