2017-05-10 11 views
0

このコードは私には2つの問題を示す単一のエラーを与えています。テンプレートとループのトラブル

int healthyConst = 0; 
int sickConst = 1; 
int recoveredConst = 2; 

GraphMatrix<int, double> graph (100); 
for (int i = 0; i < sampleSize; i++) 
{ 
    if(std::rand() % 2 > 0.05) graph.setVertexInfo(i, sickConst); //Error 
    else graph.setVertexInfo(i, healthyConst); 
} 

エラーは次のとおりです。

error: no matching function for call to GraphMatrix::setVertexInfo(int&, int*)

とソースに次のように問題の関数が宣言されます。

void GraphMatrix::setVertexInfo(int v, VertexObject& info)

まず、私が参照すべきではありません。これは私にとって無意味なようですが、私はこれを解決することはできません。私がコンパイラよりも賢明で、for(int* i = 0...)と入力しようとすると、エラーはsetVertexInfo(int&*, int*)というエラーになりますが、これが何を意味するのか分かりません。

第2に、sickConstはポインタではありません。それは単なるintです。今私は、書かれているように、メソッドがVertexObject &を受け入れるが、*sickConstでもinvalid type argument of 'unary *'の文句を言うことをコンパイラに知らせる。また、私は&sickConstを試しましたが、コンパイラは予期せずポインタとして解釈しません。

また、同じ理由から、forループの2行目で同じエラーがスローされることにも注意してください。

問題は次のとおりです。これらのエラーが発生するのはなぜですか。どのように修正するのですか?

答えて

2

あなたは次のようにソース内のあなたの関数の宣言は次のように述べている。

void GraphMatrix::setVertexInfo(int v, VertexObject& info)

をただし、あなたにあなたがそれをintの種類を渡しているforループ。関数の宣言&の定義を変更して、intの型を受け入れるか、または関数に渡す型をVertexObjectとして変更します。