2016-10-01 4 views
0

私はちょうどコードを始めるばかりで、今は配列について学んでいます。私は配列のリストを取るプログラムを書こうとしていて、最初か最後の数字が2かどうかを教えてくれます。これを行うには、関数を使用しています。私が間違っているのは何g ++コンパイラが私の関数を認識していません

#include <iostream> 
    using namespace std; 

    const int size = 6; 
    bool firstlast(int array[size]); 

    int main() 
    { 
     int array[size]; 
     for (int index = 0; index < size; index++) 
     { 
      cout << "Enter value for array[" << index << "]\n"; 
      cin >> array[index]; 
     } 

     bool check = firstlast(array[size]); 
     if (check) 
      cout << "The array either starts or ends in 2!\n"; 
     else 
      cout << "The array does not start or end with 2.\n"; 
     return 0; 
    } 

    bool firstlast(int array[size]) 
    { 
     if (array[0] == 2) 
      return true; 
     if (array[size - 1] == 2) 
      return true; 
     return false; 
    } 

私のコードは次のようになりますか?

candidate function not viable: no known conversion from 'int' to 'int *' for 1st argument; take the address of the argument with and 
+0

エラーは何ですか? – Ryan

+0

私はちょうど質問 –

+0

にそれを追加しました。宣言は 'bool firstlast(int array [size]);'でなければなりません - 関数の定義と一貫性を持ち、配列の型を指定する必要があります。 –

答えて

0

このコード

bool check = firstlast(array[size], size); 
配列の size番目の要素ではない配列自体を渡そう

: コンパイラは私にエラーを与えます。 C++では、配列構文を使用して関数パラメータを記述した場合でも、配列はポインタによって渡されます。 、自分自身の混乱を避ける

bool firstlast`(int* array, int size)` 

firstlastを変更し、コンパイラは、関数の罰金を認識している

bool check = firstlast(array, size); 
+0

ありがとう!しかし、なぜ "int size"をパラメータに含める必要がありますか? –

+0

@ JoshSimaniその情報は別の方法で失われるためです。また、[ここ](http://stackoverflow.com/questions/1461432/what-is-array-decaying)をご覧ください。 –

1

でそれを呼び出すために

問題は、コードがポインタを期待関数にarray[size]arrayの存在しない素子)を通過しようとする機能

bool check = firstlast(array[size]); 

を呼び出すようにしてあります。

呼び出し、おそらく、関数に渡されたときのアレイは、暗黙的にポインタに変換されているので

bool check = firstlast(array); 

でなければなりません。

関連する問題