2016-11-15 2 views
1

IveはfindMaxメソッド&を実装してこの機能をテストしました。事前にfindMaxメソッドをvoidとして使用していましたが、メソッドの最後に、単に< maxValue < <があったので、メインテスターで呼び出されたときに、私が望む結果が出力されました。Find Maxメソッドからint値を戻してテストファイルに出力する

私はそれを変更しようとしていますので、メソッドの戻り値の型はintであり、メソッドで返される値を出力することができます。私がテスター・ファイルの変数maxValueを操作しようとすると、variableは未定義です。

これを修正するにはどうすればよいですか?また、これを行う最も適切な方法は何ですか?メソッドをvoid型としてメソッド内にcout文を持つか、または整数型として最後にintを返します。

ありがとうございました。

#ifndef FINDMAX_H 
#define FINDMAX_H 
#include <iostream> 
using namespace std; 

template < typename T > 
int FindMax(T* array, int array_len) { 

    if (!array || array_len <=0) { 
     cout << "Invalid Array" << endl; 
     exit(1); 
    } 

     //T * newArray = new int[array_len]; //create new array 
     T maxValue = array[0]; //set to the first array element 
     int largestIndex = 0; 

     for (int i = 1; i < array_len; i++) { //going through array from pos 2 
      if (array[i] > maxValue) { //checking if value at array position i is > maxValue 
       maxValue = array[i]; //set maxValue = to element at current Array position 
       largestIndex = i; //set largest index = to the current index it is at 
      } 

      return maxValue; 
     } 
     //cout << "The max value in this array is: " << maxValue << endl;//return highest value in array 

     //cout << "The max value is at position : " << largestIndex << endl;//return position of highest value in the array 
     //cout << "" << endl; 
} 

#endif 

テスター

#include "FindMax.h" 
#include <iostream> 
using namespace std; 
#include <string> 

int main() { 


    int array_len = 10; 
    int* array = new int[array_len]; 
    double* array2 = new double[array_len]; 

    for (int i = 0; i < array_len; i++) //fill array 1 
     array[i] = i * i; 

    for (int i = 0; i < array_len; i++) //fill array 2 
     array2[i] = i * 2.5; 

    FindMax(array, array_len); 
    cout << maxValue << endl; // error here 


} 
+0

同じ制御フローに2つのreturn文がありますか? – mkmostafa

+0

maxValueとlargestIndexの両方を返すことをお勧めします。オプションとして 'struct'を検索する必要があります。 – solti

答えて

0

すべての関数の最初の到達不能コード

template < typename T > 
int FindMax(T* array, int array_len) { 
      //... 

      return maxValue; 
      return largestIndex; 
      ^^^^^^^^^^^^^^^^^^^^^^ 
     } 
     //cout << "The max value in this array is: " << maxValue << endl;//return highest value in array 

     //cout << "The max value is at position : " << largestIndex << endl;//return position of highest value in the array 
     //cout << "" << endl; 
} 

を持っているあなたは、最後のreturn文を削除する必要があります。

エラーについては、その後、あなたは maxValue変数宣言し、アルゴリズムの戻り値でそれを割り当てる必要があること

int maxValue = FindMax(array, array_len); 
^^^^^^^^^^^^^ 
cout << maxValue << endl; // error here 

を記述する必要があります。

+1

@LiamLavertyはい。 mainではmaxValueという名前は宣言されていないため不明です。 –

+0

@LiamLavertyアルゴリズムの変数maxValueのスコープは、アルゴリズムの本体によって制限されます。それはアルゴリズムの外では見えず、生きていないローカル変数です。 –

+0

結果を印刷するにはどのような方法が良いですか?メソッド自体の中にcout文があるので、mainでメソッドを呼び出すか、mainにcoutを入れて、メソッドから返された値をmaxValueの値に渡すだけです。 – Liam

関連する問題