VC的静态常量成员

(金庆的专栏)

在类中声明一个静态常量成员:

// A.h 

class A 

{ 

public: 

    static const unsigned int SIZE = 10; 

};



在A.cpp中定义:
unsigned int A::SIZE;

VC2008报多重定义错误。

删除A.cpp中的定义就可以通过。但是gcc编译报错。

感觉是VC中的静态常量成员声明后会自动产生实例。

看到protobuf生成的代码中,.pb.cc文件中,静态常量成员的定义会用_MSC_VER括起来:

#ifndef _MSC_VER 

const int PlayerData::kPlayerIdFieldNumber; 

#endif  // !_MSC_VER



另一个方案是用enum代替,但仅限int类型:

public: 

    enum { SIZE = 10 };