2016-05-04 1 views
1

を使用して配列内の最大要素を探す:C++:私は、アレイ内の再帰的な検索の最大要素(コードC++)を使用してfindMax機能に問題が持って再帰と参照変数

void findMax (int& imax, int n, int* arr){ 
    imax=arr[0]?arr[0]:0; 
    if(n > 0){ 
     imax = std::max(arr[n],findMax(imax, n-1, arr)); // error here: No matching function for call to max??? 
    } 
} 

あなたはなぜ、と私のためのソリューションを説明することができますこのエラー?

おかげで、

+0

'findMax'は何も返さないためです。 – songyuanyao

+0

申し訳ありません、私は編集しました。 – DinhNC

+0

findmaxはintに大きな値を返す必要があります – Steve

答えて

3

std::maxは、2つの値の大きいを返しますが、findMaxの戻り値の型はvoidです。

void findMax (int& imax, int n, int* arr) 

だから、それは明らかに存在していない

std::max(int, void) 

を探しています。

+0

ありがとう、今私はどこに私の問題がある参照してください:) – DinhNC

2

intを返すように関数を変更する代わりに、範囲が有効なときにfindmaxを実行して、その戻り値でstd :: maxを呼び出すだけで済みます。

void findMax (int& imax, int n, int* arr){ 
    imax=arr[0]?arr[0]:0; 
    if(n > 0){ 
     findMax(imax, n-1, arr); 
    } 
    imax = std::max(arr[n], imax); 
} 

@CoryKramerは正解ですが、エラーは実際にあなたの例ではintをmaxに渡していません。これを修正したいだけなら、この代替ソリューションを使うことができます:

int findMax (int& imax, int n, int* arr){ 
    imax=arr[0]?arr[0]:0; 
    if(n > 0){ 
     imax = std::max(arr[n],findMax(imax, n-1, arr)); 
    } 
    return imax; 
} 
+0

あなたのソリューションで私は私の問題を参照していただきありがとうございます:) – DinhNC

関連する問題