2011-09-10 54 views
1

的类成员,我有以下情况:C++相同类型

class Foo 
{ 
public: 
    static const Foo memberOfFoo; 

    ........ 
} 

所以事情是我不能在同一行初始化它,我宣布它,我无法通过初始化在构造函数中初始化List,有谁知道该怎么办?

回答

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值”。许多静态整数常量就是这种情况。

2

除常量整型以外的类静态需要/可以在定义点初始化。你需要在某个地方申报的(不那么)memberOfFoo,加入

const Foo Foo::memberOfFoo = /*construct here*/; 
0

这是如何实现的初始化...

class Foo 
{ 
public: 
    static const Foo memberOfFoo; 

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

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

...