C++ QString数组的正向声明导致分段错误

C++ QString数组的正向声明导致分段错误,c++,arrays,qt,forward-declaration,qstring,C++,Arrays,Qt,Forward Declaration,Qstring,在这段代码中,我有两个前向声明,一个bool数组和名称空间NLog中的QString数组 布尔工作。QString产生分段错误 标题: class Log : public QObject { explicit Log(); public: enum Facility { third_party_fac, test_fac, __facility_last_element }; enum Severity {

在这段代码中,我有两个前向声明,一个bool数组和名称空间NLog中的QString数组

布尔工作。QString产生分段错误

标题:

class Log : public QObject
{

    explicit Log();
public:
    enum Facility
    {
      third_party_fac,
      test_fac,
      __facility_last_element
    };
    enum Severity
    {
      debug_sev,
      warning_sev,
      critical_sev,
      fatal_sev,
      __severity_last_element
    };
};
namespace NLog
{
    extern bool logging_enabled[Log::__facility_last_element][Log::__severity_last_element];
    extern QString severity_name[Log::__severity_last_element];
};
class LogStaticInitiallizer
{
public:
    LogStaticInitiallizer();
};
static LogStaticInitiallizer initiallizer=LogStaticInitiallizer();
资料来源:

QString NLog::severity_name[Log::__severity_last_element];
bool NLog::logging_enabled[Log::__facility_last_element][Log::__severity_last_element];
using NLog::logging_enabled;
using NLog::severity_name;
LogStaticInitiallizer::LogStaticInitiallizer()
{
    qDebug()<<"0";
    qDebug()<<logging_enabled[0][0];
    qDebug()<<severity_name[0];
    qDebug()<<"1";
}
它产生

0

假的


正如Piotr S所说,问题是LogStaticInitializer构造函数在源文件中初始化之前被调用


此外,保留标识符以u u开头存在一个与主要问题无关的问题。请参见

\u facility\u last\u元素和其他以“是保留标识”开头的元素这可能是静态初始化顺序的失败吗?在哪里初始化数组?@vahancho它似乎不相关,因为QString具有默认值ctor@user2136963对静态初始化器可能在执行QString数组元素的ctor之前被初始化