【发布时间】:2010-04-27 10:51:39
【问题描述】:
我有一个静态变量的奇怪问题,它显然没有按应有的方式初始化。
我有一个在 Windows 和 Linux 上运行的大型项目。由于 Linux 开发人员没有这个问题,我建议这是某种有线 Visual Studio 的东西。
头文件
class MyClass
{
// some other stuff here
...
private:
static AnotherClass* const Default_;
};
CPP 文件
AnotherClass* const MyClass::Default_(new AnotherClass(""));
MyClass(AnotherClass* const var)
{
assert(Default_);
...
}
问题是Default_总是NULL。我还在该变量的初始化处尝试了一个断点,但我无法捕获它。
另一个班级也有类似的问题。
CPP 文件
std::string const MyClass::MyString_ ("someText");
MyClass::MyClass()
{
assert(MyString_ != "");
...
}
在这种情况下,MyString_ 始终为空。所以再次没有初始化。
有人对此有想法吗?这是 Visual Studio 设置问题吗?
干杯西蒙
编辑:
我还遇到了静态初始化惨败。但我不确定这是否是问题所在,因为 Linux 编译器没有问题。在这种情况下编译器不应该以同样的方式做出反应吗?
【问题讨论】:
-
尝试从头开始创建一个新项目,看看是否也会发生这种情况
-
对不起,做不到。正如我所说,这是一个非常庞大的项目。
-
我认为第一个例子是一个错字,应该是
AnotherClass* const MyClass::Default_(new AnotherClass("")); -
您仍然可以尝试使用静态成员创建一个新的空测试项目,然后查看它是否正确初始化...
-
代码是否在静态库中?如果依赖的程序没有引用类 MyClass (确切地说是编译单元),那么你会遇到问题。然后链接器不会为变量创建静态初始化代码。
标签: c++ visual-studio-2008 static variables