У меня есть следующие три файла в том же каталоге:Невозможно Ссылка на Си ++
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);
}
И я действительно недоумевал, почему следующая последовательность компиляции выдает результат показали:
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
Любые идеи или идеи приветствуются!
Возможный дубликат [Почему я получаю ошибку Linker с указателем функции шаблона?] (Http://stackoverflow.com/questions/4763216/why-am-i-getting-a-linker-error-with-template -function-pointer) – 6502
Пожалуйста, не используйте 'using namespace std;' в файле заголовка. – quamrana
Хорошо, почему бы и нет? Разве мне не нужно было бы префикс std :: string, vector, map и т. Д.? Спасибо, я бы очень хотел узнать. – user434462