如何在c ++中初始化属于全局作用域的静态成员

时间:2016-10-13 09:43:55

标签: c++ scope

在我的项目中,有两个名为Configuration的类。一个是在命名空间中常见的。另一个没有命名空间,所以它在全局范围内。全局范围内的类是这样的: Configuration.h:

class Configuration
{
    public:
        static int a;
        static string b;
        void func();
}

Configuration.cpp:

#include "Configuration.h"
int ::Configuration a; //ok
std::string ::Configuration b;//error,the complier treat it like this "std::string::Configuration"

来自编译器的消息是这样的: configuration.cpp:17:错误:'std :: string :: Configuration'尚未声明

如何解决这个问题,以及为什么编译器将“std :: string :: Configuration”视为“std :: string :: Configuration”?

1 个答案:

答案 0 :(得分:0)

您不需要在此明确使用全局范围,您可以省略::

int Configuration::a;
std::string Configuration::b;

如果你真的想要,你需要以某种方式创建一个额外的间接级别:

typedef ::Configuration conf;
std::string conf::b;