Я не могу понять проблему, с которой я сталкиваюсь здесь:
class Dijkstra {
public:
Dijkstra(Graph<T> &graph, bool verbose = false)
:m_graph(graph), m_verbose(verbose){ }
[ .. ]
}
Graph<int> *custom = Graph<int>::custom((int *) &nodes[0], 4, 5);
Dijkstra<int> spt(custom, true);
Разве конструктор Дейкстры не берет ссылку, и если да, то почему компилятор жалуется?
graph.cpp:222:37: error: no matching function for call to ‘Dijkstra<int>::Dijkstra(Graph<int>*&, bool)’
Dijkstra<int> spt(custom, true);
^
graph.cpp:222:37: note: candidates are:
graph.cpp:128:3: note: Dijkstra<T>::Dijkstra(Graph<T>&, bool) [with T = int]
Dijkstra(Graph<T> &graph, bool verbose = false)
^
graph.cpp:128:3: note: no known conversion for argument 1 from ‘Graph<int>*’ to ‘Graph<int>&’
graph.cpp: 126: 7: примечание: Дейкстра :: Дейкстра (const Dijkstra&)
класс Dijkstra {
У меня такое чувство, что я все неправильно понимаю.
Указатель и ссылка — это две разные вещи, и в строго типизированном языке не всегда совместимы. Вы должны взглянуть на документ для получения дополнительной информации. В любом случае, вот решение для вашего случая:
Graph<int> *custom = Graph<int>::custom((int *) &nodes[0], 4, 5);
Dijkstra<int> spt(&custom, true);
Добавление & перед ref возвращают адрес объекта, как и указатель.
Других решений пока нет …