My ("static") California class has a list of cities, and a static
member function returns true if a certain city is contained:
California::contains("San Francisco"); // true
I implemented it like below, but it does not compile. It gives me some
obscure linker error (see below). What's wrong with my code?
#include <iostream>
#include <map>
class California{
private:
static std::map<std::string, int> cities;
public:
California(){
cities.insert(std::make_pair("San Francisco", 1));
}
static bool contains(std::string city){
return cities.find(city) != cities.end();
}
};
int main(){
if(California::contains("San Francisco")){
std::cout << "SF is in CA!" << std::endl;
}
}
bash-2.05b$ g++ california.cpp
/tmp/ccduZZS6.o(.gnu.linkonce.t._ZN10California8contain sESs+0x11): In
function `California::contains(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >)':
: undefined reference to `California::cities'
/tmp/ccduZZS6.o(.gnu.linkonce.t._ZN10California8contain sESs+0x2a): In
function `California::contains(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >)':
: undefined reference to `California::cities'
collect2: ld returned 1 exit status