我有一个奇怪的问题,
在 A 类中声明一个名为 B 类的静态成员变量。并在cpp文件中初始化。但是 B 类的构造函数从未被调用过。我尝试使用一些小测试,可以正常调用测试构造函数。所以这对我们的生产系统来说很奇怪。
像这样的代码,在hpp中:
class Test
{
public:
Test()
{
ofstream file("/tmp/wup.txt",ios::app);
file << "wup in test" << endl;
file.close();
}
};
//## An extended personality
class TsdNAExtPersonality : public TsdNAPersonality{
public:
TsdNAExtPersonality(
s_gg62_personRec * gg62Header,
TsdNAFunctionType requiredFunctionType);
private:
static Test test;
public:
TsdNAExtPersonality( string * personalityFile, TsdNAFunctionType requiredFunctionType);
};
在另一个cpp文件中我初始化
Test TsdNAExtPersonality::test;
我尝试了几种方法,但我发现所有方法都没有用。
- 没有将变量设置为成员变量而是全局变量 ==> 也无法输出
- 将成员变量更改为指针并将初始化方式更改为使用 new ==> no
环境是HP-UX,编译是aCC
所以我的问题是:
是否有任何编译选项会影响变量?换句话说,所有的静态变量都不会被初始化。
从 C++ 的标准来看,应该在加载库时调用它,对吧?
我用同样的方法放了另一个静态int值,它可以被初始化。但是没有调用类构造函数,很奇怪。
我的代码有什么错误吗?