如何通过 A 初始化 CPP 文件中的静态成员

how to initialize a static member in cpp file only situation via a

本文关键字:静态成员 文件 CPP 何通过 初始化      更新时间:2023-10-16

我在 cpp 文件中有一个类。在我的情况下没有头文件:

class MyClassATest
{
     static Logging &logger = Logging::getInstance();
     static void testMethodA()
     {
          logger.logDebug(....);
     }
};

我尝试了几种不同的方法,试图使第一个语句起作用:

constexpr static Logging &logger = Logging::getInstance();
static Logging const &logger = Logging::getInstance();
constexpr static Logging const &logger = Logging::getInstance();

在我的情况下,有没有办法初始化该记录器变量?

编辑:

以下是不同情况下的结果:

error: field initializer is not constant
         constexpr const static Logging &logger = Logging::getInstance();
error: field initializer is not constant
         constexpr static const BMLogging &logger = BMLogging::getInstance();
error: field initializer is not constant
         constexpr static BMLogging const &logger = BMLogging::getInstance();
error: field initializer is not constant
         constexpr static BMLogging &logger = BMLogging::getInstance();

你可以在类外初始化它,如下所示:

// This goes in your CPP file at any point after the class declaration
Logging& MyClassATest::logger(Logging::getInstance());

或者,您可以将初始化放在静态成员函数中:

static Logging& logger() {
    // Make a function-static variable instead of a class-static one
    static Logging &loggerInstance(Logging::getInstance());
    return loggerInstance;
}

在类中,成员初始化仅适用于整型。因此,您必须在类外初始化它。