2010-08-27 8 views
20

Perché ricevo errore di linker quando provo a compilare questo in Visual Studio 2008errore del linker strano con std :: statica mappa

#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::niceString(mappp); 

} 

errore è:

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" ([email protected]@@[email protected][email protected]@[email protected]@[email protected][email protected][email protected]@@@[email protected]@[email protected]@A) test22.obj test22 
+1

Sostanzialmente un duplicato di [Errore statico del linker struct] (http://stackoverflow.com/questions/1850809/static-struct-linker-error) tra gli altri. – Troubadour

+0

possibile duplicato di [Definizione di membri statici in C++] (http://stackoverflow.com/questions/3536372/defining-static-members-in-c) –

risposta

26

Hai dichiarato il membro statico _myMap, ma non definito. Aggiungere questa riga appena sopra int main():

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

Pensate a come una funzione che è stato dichiarato, ma non definito in alcun file cpp - si ottiene un errore di linker se lo si utilizza.

+0

è anche necessario se ho un'altra variabile statica, ad es. std :: string myString? – BlaBla

+0

@BlaBla: Sì ... –

+0

Penso che tu non intendessi "ma non lo definì", ma invece "ma non inizializzato" – sergiol

Problemi correlati