2016-10-08 8 views
-1

私はここに直面しています問題を理解することはできません。に「グラフ<int> *」から引数1のために知られていない変換「グラフ<int>&」

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:7::126注意:ダイクストラ::ダイクストラ(constのダイクストラ&) クラスダイクストラ{

私は、それは間違ったことのすべてを取得しています感じています。

+6

はい、コンストラクタでは* reference *が必要です。しかしあなたは*ポインタ*を渡しています。あなたはポインタと参照が全く別の2つのものであることを知っていますか? – AnT

+1

私はこの人が大好きなので、言葉の川で自分自身を説明しようとしています。とにかく、いいえ、私はそうでなければ、私は尋ねていないでしょう... – pedr0

+0

@ pedr0 _rivers_は絶えず変化しています;)。 SOで尋ねることによって、プログラミング言語の基礎を習得しないでください。 –

答えて

1

ポインタと参照は2つの異なるものであり、強い型付けされた言語では常に互換性がありません。詳細については、文書を参照する必要があります。とにかく、ここにあなたのケースのためのソリューションがある:REFの前に&を追加

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

は、オブジェクトのアドレスを返し、そうポインタがあります。

+2

質問にはお答えください。これは、_単純なtypo_閉じる理由カテゴリに該当します。あなたの答えは実際に間違っていることにも注意してください必要なのは、アドレスではなく逆参照です: 'Dijkstra spt(* custom、true);'。ありがとうございました。 –

+0

http://stackoverflow.com/questions/8520678/invalid-pointer-why – pedr0

関連する問題