2017-02-19 2 views
1

私はあなたの助けmin関数に複雑な引数を入れるとエラーになるのですか?なぜ?(EclipseのC++)

if(s[i]==t) 
{ 
    //I get error for this 
    //aSP[pos] = min((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

    //Then I replace the above code with the following codes, and then it worked 
    int a = (dfs(i)+pow(i-pos,2)); 
    int b = aSP[pos];    
    aSP[pos] = min(a,b); 
} 

が必要しかし、彼らは同じ右ですか? Eclipseからエラーが発生するのはなぜですか?
それは言う

説明リソースパスの場所の種類 無効な引数 " 候補者は、次のとおりです。 のconst#0 &分(のconst#0 &、constの#0 &)

説明リソースパス場所が無いタイプへの一致関数 'min(__ gnu_cxx :: __ promote_2 :: __ type、 int &)' ColorfulRoad.h/colorfulroad-C++行53 C/C++問題

や他のいくつかの情報だけでなく、障害が発生した競合のパラメータの種類、テンプレート引数控除/置換...のような

答えて

2

エラーメッセージは、この関数呼び出し

aSP[pos] = min((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

第一及び第二引数に異なるタイプを有することを意味します。したがって、コンパイラはテンプレートパラメータの型を推定できません。

コンパイラが明示的にテンプレート引数を指定するのを助けることができます。たとえば、

aSP[pos] = min<int>((dfs(i)+pow(i-pos,2)) , aSP[pos]); 

第2引数の呼び出しでは、両方の引数がint型です。したがって、テンプレートパラメータはintに導かれます。

1

あなたの代わりにGCCエラーがあれば理解しやすいです:

error: no matching function for call to 'min(double, int)' 
    std::min(2.0, 3); 
        ^

だけを最初の引数をintにキャストします。

関連する問題