尝试在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(因为肯定发生的是两个全局初始化程序以错误的顺序执行)。

09-06 22:00