我收到以下链接器错误:
错误1错误LNK2001:未解析的外部符号“private:static class std :: map,class std :: allocator&gt ;, struct SDL_Surface *,struct std :: less,class std :: allocator>>,class std :: allocator,class std :: allocator> const,struct SDL_Surface *>>> CSurface :: loadedSurfaces“(?loadedSurfaces @ CSurface @@ 0V?$ map @ V?$ basic_string @ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ PAUSDL_Surface @@ U&$ @少V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ 2 @ @std @@@ 2 @ V'$分配器@ U&$ @配对$$ CBV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ PAUSDL_Surface @@ @std @@@ 2 @@ std @@ A)CSurface.obj
CSurface编译单元的头文件和cpp文件的代码位于:
导致此链接器错误的原因是什么:(它让我发疯了。
答案 0 :(得分:2)
您已声明loadedSurfaces
,但尚未对其进行定义。您需要将以下内容添加到一个转换单元中才能实际声明变量:
map<string, SDL_Surface*> CSurface::loadedSurfaces;
就像现在一样,类定义中的loadedSurfaces
就像函数的原型一样。当您尝试使用它时,链接器会查找它,因为它看到了前向声明,但它从未在任何地方找到实际的定义。你必须给它一个定义,并且链接器会满意,因为它知道每个人在使用名称loadedSurfaces
时所讨论的实际翻译单元中的实际变量。
答案 1 :(得分:2)
CSurface::loadedSurfaces
已声明但未定义。将以下内容添加到.cpp
文件中:
map<string, SDL_Surface*> CSurface::loadedSurfaces;