我想要看起来像这样的东西...
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
内的函数之外提供单独的定义?
答案 0 :(得分:1)
在声明static
变量时,还必须定义它们。在cpp文件中,在Foo声明之后,添加以下行:
SomeType Foo::myField;
然后,您的init函数应该起作用。
还请注意,您可以通过如下定义直接将其初始化:
SomeOtherType sot;
SomeType Foo::myField = sot.someNonStaticFunction();
或:
SomeType Foo::myField = SomeOtherType().someNonStaticFunction();