尝试在MY_GLOBAL_CONST
中使用ProblemClass::ProblemClass()
时未分配。为什么?如何解决?我正在研究一个旧的VC6 MFC项目。
SomeClass.h
#include "ProblemClass.h"
class SomeClass
{
private:
ProblemClass m_problemClass; //created on the heap
public:
SomeClass();
~SomeClass();
}
问题类
class ProblemClass
{
public:
ProblemClass();
~ProblemClass();
}
ProblemClass.cpp
#include "ProblemClass.h"
const CString MY_GLOBAL_CONST = _T("User");//Also tried to put that line in ProblemClass.h without luck
ProblemClass::ProblemClass()
{
CString foo = MY_GLOBAL_CONST; //MFC-Runtime assertion fails, MY_GLOBAL_CONST is not assigned yet
}
ProblemClass::~ProblemClass(){}
更新:
经过进一步的研究,我可以确认
SomeClass
也在全局上下文中实例化。因此,保罗·桑德斯(Paul Sanders)说“发生的是两个全局初始化程序以错误的顺序执行”是绝对正确的。 最佳答案
尝试更换:
const CString MY_GLOBAL_CONST = _T("User");
与:
const TCHAR MY_GLOBAL_CONST [] = _T("User");
后一种构造不需要任何运行时初始化,因此可以在其他初始化代码中使用
MY_GLOBAL_CONST
(因为肯定发生的是两个全局初始化程序以错误的顺序执行)。