Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LNK2001使用自定义结构的std::vector_C++_Stl_Linker Errors - Fatal编程技术网

C++ LNK2001使用自定义结构的std::vector

C++ LNK2001使用自定义结构的std::vector,c++,stl,linker-errors,C++,Stl,Linker Errors,我想要一些数据缓存,其中包含一些可以通过UpdateCache函数更新的对象。但是,我在LNK2001后面跟着LNK1120时遇到了问题 头文件 我从链接服务器收到的错误消息是 错误LNK2001:未解析的外部符号专用:静态类std::vector>MyClass::myObjectCache?myObjectCache@MyClass@@0V$vector@UMyObject@@V$allocator@UMyObject@@@std@@@std@@A 致命错误LNK1120:1个未解析的外部

我想要一些数据缓存,其中包含一些可以通过UpdateCache函数更新的对象。但是,我在LNK2001后面跟着LNK1120时遇到了问题

头文件

我从链接服务器收到的错误消息是

错误LNK2001:未解析的外部符号专用:静态类std::vector>MyClass::myObjectCache?myObjectCache@MyClass@@0V$vector@UMyObject@@V$allocator@UMyObject@@@std@@@std@@A

致命错误LNK1120:1个未解析的外部


我的观点是,分区到头文件和代码文件是有问题的,因为我曾经遇到过不正确分区的类似问题。如果再次出现这样的问题,如果您可以发布一些关于将什么放入头文件以及将什么放入代码文件的规则,那就太好了,因为这非常混乱。

您需要将此添加到cpp文件中:

std::vector<MyObject> MyClass::myObjectCache;
std::vector<MyObject> MyClass::myObjectCache;
原因是,静态存在时,类从未被实例化,因此无论类的实例是否被实例化,静态都需要存在。上面这一行创建了静态实例,因此无论您是否创建过类本身的实例,它都是存在的。

因为您的向量是静态的,就编译器而言,本质上是一个全局实体,所以您需要确保在编译单元中为它提供一个归宿。这就是为什么你必须照@Goz说的做

std::vector<MyObject> MyClass::myObjectCache;
std::vector<MyObject> MyClass::myObjectCache;