Я пишу заголовочный файл для простого класса графа, реализованного с использованием класса карты STL. Тем не менее, у меня возникают проблемы с параметрами шаблона, мне кажется, что я не могу объявить векторные объекты и объекты карты «без типа», но я не вижу, как я не даю ему требуемый тип. Также классы вектора и карты включены в директивы. private:
закомментировано для тестирования. Я чувствую, что это какая-то синтаксическая ошибка.
Graph.h
#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>
template <typename T>
class Graph
{
public:
Graph();
Graph(const Graph<T>& other);
Graph& operator=(const Graph<T>& other);
~Graph();
vector<T> AdjacentNodes(const T& n);
//private:
map<T, vector<T>> m;
};
Чтобы использовать карту и векторный класс, вам нужно добавить ниже заголовочные файлы
#include <map>
#include <vector>
а также map и vector являются частью пространства имен std. поэтому вам нужно использовать std :: map, std :: vector.
(следующий блок взят из http://www.cplusplus.com/reference/map/map/ , который я предлагаю вам проверить!)
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less<Key>, // map::key_compare
class Alloc = allocator<pair<const Key,T> > // map::allocator_type
>
Прежде всего, убедитесь, что вы поставили «using namespace std;» в верхней части или добавьте стандартные элементы, такие как вектор карты с std::
Во-вторых, как показано в шаблоне выше, если ваш typename T
это не тип данных, для которого std::less
определено, что вам нужно создать собственную функцию сравнения (может быть указателем функции или объектом функции) и ввести ее в качестве третьего аргумента шаблона.
Наконец, будьте осторожны с >>
в map<T, vector<T>> m;
если вы используете старые компиляторы, вам нужно будет вставить пробел между двумя последними >
«s