I have the following three files in the same directory:
citysim.cpp
#include "utils.h"
using namespace std;
int main()
{
    City *c;
    c = new City();
    Graph<City *> g;
    g.addVertex(c);
}
utils.h
#include <iostream>
#include <map>
#include <vector>
using namespace std;
class City {
    public:
        City() {}
    private:
        string name;
};
template <typename Tkey>
class Graph {
    public:
        Graph() {}
        void addVertex(Tkey);
    private:
        vector<Tkey> v;
        vector< vector<int> > e;
        map<Tkey, int> key_map;
};
utils.cpp
#include "utils.h"
template <typename Tkey>
void Graph<Tkey>::addVertex(Tkey vertex)
{
    v.push_back(vertex);
}
And I am really perplexed as to why the following compilation sequence produces the result indicated:
test> g++ -c citysim.cpp
test> g++ -c utils.cpp
test> g++ -o citysim citysim.o utils.o
citysim.o: In function `main':
citysim.cpp:(.text+0x4a): undefined reference to `Graph<City*>::addVertex(City*)'
collect2: ld returned 1 exit status
Any ideas or insights are appreciated!
 
     
    