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

How to initialize static members which belong to global scope in c++

本文关键字:作用域 静态成员 全局 初始化 c++      更新时间:2023-10-16

在我的项目中,有两个名为Configuration的类。一个是在命名空间common中。另一个没有名称空间,所以它在全局作用域中。全局作用域中的类是这样的: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: error: ' std::string::Configuration '未被声明

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

您不需要在这里显式地使用全局作用域,您可以省略::

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

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

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