Есть две проблемы.
Сначала необходимо указать зависимый тип в insert
:
void insert(GRAPHVERTEX inSRC, GRAPHVERTEX inDST)
{
typename GRAPHMAP::iterator itr = m_graph.find(inSRC);
}
Во-вторых, вам нужен оператор <для вашего класса вершин. В публичном разделе VERTEX добавьте: </p>
bool operator<(const VERTEX<T>& right) const { return m_vertex < right.m_vertex; }
Обратите внимание, что в C ++ имена всех CAPS обычно зарезервированы для констант. Vertex
было бы гораздо более нормальным названием для вашего класса. Также обратите внимание, что наличие using namespace
в заголовке может иметь много нежелательных и непредсказуемых результатов в зависимости от порядка включения и его следует полностью избегать.
РЕДАКТИРОВАТЬ: По крайней мере, когда я скомпилировал это с g ++, первая ошибка, которую я получил, касалась GRAPHMAP :: iterator. Когда компилятор видит идентификатор, который можно рассматривать как переменную или тип, он выбирает интерпретировать его как переменную по умолчанию, но затем обнаруживает, что на самом деле это был тип. Вы говорите компилятору, что это действительно тип, используя ключевое слово typename
.
Второе, на что следует обратить внимание, это то, что map
является упорядоченным контейнером, и поэтому вам необходимо либо передать функцию сравнения, либо предоставить <оператор для ключа <code>map. Поскольку VERTEX
является ключом карты, я настроил operator<
, чтобы объекты можно было сортировать и поддерживать порядок. Возможно, вам придется настроить оператор сравнения по мере развития вашего VERTEX
класса.