是否可以在静态函数中初始化静态字段?
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();
我想要这样的东西...:[=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();