开发者

Weird linker error with static std::map

开发者 https://www.devze.com 2023-01-13 03:28 出处:网络
Why do I get linker error when I try to compile this in Visual Studio 2008 #include <stdafx.h> #include <iostream>

Why do I get linker error when I try to compile this in Visual Studio 2008

#include <stdafx.h>
#include <iostream>
#include <map>
#include <string>

class MyClass
{
public:
 MyClass () { };
 virtual ~MyClass() {};

 static std::string niceString (std::map<int, int> mappp) { _myMap = mappp; return "nice string"; };

private:
 static std::map<int, int> getMap ( ) { return _myMap; };

 static std::map<int, int> _myMap;
}; 

int main(){

 std::map<int, int> mappp;

 mappp[1] = 1;

 std::cout << MyClass::niceStr开发者_如何学JAVAing(mappp);

}

error is:

Error 1 error LNK2001: unresolved external symbol "private: static class std::map<int,int,struct std::less<int>,class std::allocator<struct std::pair<int const ,int> > > MyClass::_myMap" (?_myMap@MyClass@@0V?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@@std@@A) test22.obj test22


You've declared the static member _myMap, but not defined it. Add this line just above int main():

std::map<int, int> MyClass::_myMap;

Think of it like a function that has been declared but not defined in any .cpp file - you get a linker error if you use it.

0

精彩评论

暂无评论...
验证码 换一张
取 消