неизвестное преобразование для аргумента 1 из «Graph & lt; int & gt; *» в «Graph & lt; int & gt; & amp;»

Я не могу понять проблему, с которой я сталкиваюсь здесь:

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 {

У меня такое чувство, что я все неправильно понимаю.

-1

Решение

Указатель и ссылка — это две разные вещи, и в строго типизированном языке не всегда совместимы. Вы должны взглянуть на документ для получения дополнительной информации. В любом случае, вот решение для вашего случая:

Graph<int> *custom = Graph<int>::custom((int *) &nodes[0], 4, 5);
Dijkstra<int> spt(&custom, true);

Добавление & перед ref возвращают адрес объекта, как и указатель.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector