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

时间:2019-07-29 17:08:39

标签: c++ static lnk2001

我想要看起来像这样的东西...

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内的函数之外提供单独的定义?

1 个答案:

答案 0 :(得分:1)

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

SomeType Foo::myField;

然后,您的init函数应该起作用。


还请注意,您可以通过如下定义直接将其初始化:

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

或:

SomeType Foo::myField = SomeOtherType().someNonStaticFunction();
相关问题