2012-04-29 11 views
4

У меня есть класс граф, конструктор копирования объявлено в Graph.h так:Нет соответствие функции для вызова не конструктор копирования

template<typename Object,typename Weight>    
Graph<Object,Weight>::Graph(Graph<Object,Weight>& G) 

В другом месте я пытаюсь использовать его:

Graph<double,double> G = make_graph("dense.g"); 

... но это дает мне ошибку:

 
time_trialsALIST.cpp:37: error: no matching function for call to `Graph::Graph(Graph)' 
Graph.h:142: note: candidates are: Graph::Graph(Graph&) [with Object = double, Weight = double] 

Я не понимаю, почему это произойдет; функция make_graph просто возвращает график:

Graph<double,double> make_graph(string filename){...} 

Нужен ли мне «&» где-нибудь?

+0

Возможный дубликат [C++ Шаблоны: неявное преобразование, не соответствующая функция для вызова ctor] (http://stackoverflow.com/questions/2628646/c-templates-implicit-conversion-no-matching-function-for- призыв к CTOR) – outis

ответ

5

Read the answer here. Другими словами, вам не хватает const, а не &. Сделать это:

template<typename Object,typename Weight>    
Graph<Object,Weight>::Graph(const Graph<Object,Weight>& G) 

Вы не можете привязать временную ссылку к неконстантной ссылке.