C++ QString数组的正向声明导致分段错误
在这段代码中,我有两个前向声明,一个bool数组和名称空间NLog中的QString数组 布尔工作。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 {
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之前被初始化