是否可以在静态函数中初始化静态字段?

Is it possible to initialize static fields within a static function?

我想要这样的东西...:[=​​16=]

class Foo {
public:
  static void myStaticInit();
  static SomeType myField;
};

.cpp 里面:

#include "SomeOtherFile.h" // contains SomeOtherType

void Foo::myStaticInit() {
  SomeOtherType sot;
  myField = sot.someNonStaticFunction(); // also tried Foo::myField = ...
}

... 这样我就可以像 Foo::myField 那样打电话了。但我得到的只是 LNK2001 个错误。

这样的设计可行吗?或者我是否必须在 .cpp 内的函数外提供单独的定义?

声明static变量时,还必须定义它们。在你的 cpp 文件中,在 Foo 声明之后,添加这一行:

SomeType Foo::myField;

然后,您的初始化函数应该可以工作了。


另请注意,您可以通过这样定义它来直接初始化它:

SomeOtherType sot;
SomeType Foo::myField = sot.someNonStaticFunction();

或:

SomeType Foo::myField = SomeOtherType().someNonStaticFunction();