Eta*_*tan 0 c++ stl linker-errors
我想要一些数据缓存,其中包含一些我可以通过UpdateCache
函数更新的对象.但是,我遇到的问题是a LNK2001
后跟a LNK1120
.
HeaderFile.h
#ifndef headerfile_included
#define headerfile_included
#include <vector>
struct MyObject {
unsigned int A;
unsigned int B;
};
class MyClass {
private:
static std::vector<MyObject> myObjectCache;
public:
static void UpdateCache ();
};
#endif
Run Code Online (Sandbox Code Playgroud)
CodeFile.cpp
#include "HeaderFile.h"
void MyClass::UpdateCache () {
myObjectCache.clear();
/* Repopulate cache with new data */
}
Run Code Online (Sandbox Code Playgroud)
我从链接获得的错误消息是
错误LNK2001:未解析的外部符号""private:static class std :: vector> MyClass :: myObjectCache"(?myObjectCache @ MyClass @@ 0V?$ vector @ UMyObject @@ V?$ allocator @ UMyObject @@@ std @@@ STD @@ A)".
致命错误LNK1120:1个未解析的外部因素
我的意见是,分区到头文件和代码文件是一个问题,因为我有不正确的分区类似的问题.如果它再次出现这样的问题,那么如果您可以发布一些关于放入头文件的内容以及代码文件中的内容将会很好,因为它非常令人困惑.
您需要将其添加到cpp文件:
std::vector<MyObject> MyClass::myObjectCache;
Run Code Online (Sandbox Code Playgroud)
原因是,由于静态存在而没有实例化类,因此无论是否实例化类的实例,都需要存在.上面的行创建静态的实例,因此无论您是否创建了类本身的实例,它都存在.