2016-04-29 8 views
-2

私は配列のすべての要素の合計を見つけようとしていて、sumという初期アキュムレータ変数を0として宣言しています。autoを使用しています。2つの整数を追加しますが、1つは "int"として宣言し、もう1つは "auto"として宣言しますか?

#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std; 

int main(){ 
    int n; 
    auto sum {0}; 
    cin >> n; 
    vector<int> arr(n); 
    for(int arr_i = 0;arr_i < n;arr_i++){ 
     cin >> arr[arr_i]; 
     sum=sum+arr[arr_i]; 
    } 
    cout<<sum; 
    return 0; 
} 

コンパイルエラーです。私はこれに何が間違っているか知りたい。

error: no match for 'operator+' in 'sum + arr.std::vector<_Tp, _Alloc>::operator[] >(((std::vector::size_type)arr_i))'|

gccコンパイラでコードブロックを使用していますが、C++ 11が有効です。 C++ 11では

+3

'auto sum {0}'において、 'sum'は一つの要素が' 0'の 'std :: initializer_list 'です。 –

+1

[再生されません](http://coliru.stacked-crooked.com/a/4d03e269a9019949)。 C++ 11を有効にしてコードをコンパイルします。 – LogicStuff

+0

@TavianBarnes、そうではありません。 – SergeyA

答えて

2

、あなたが

auto sum {0}; 

を使用し、その後sumはタイプstd::initializer_list<int>であり、一つの要素、0が含まれています。これは、{0}がブレースされた初期化リストであるためです。

= 0;または(0)を使用すると、あなたのコードのために適切に動作するはずです、例えば:

auto sum = 0; 
auto sum(0); 

EDIT:コメントによると、これはどのようなプログラマusually expectedていなかった、したがって、それはC++ 17で変更することがバインドされています既に-std=c++11-std=c++14per the request of the C++ committeeの場合でも、GCCとClangの新しいバージョンで既に実装されているN3922の提案があります。

+3

@TavianBarnesの後に繰り返すことはできません - このユーザーは間違いです。 – SergeyA

+0

@SergeyAごめんなさい、あなたが言っていることを理解できないのですか? – jotik

+0

あなたの答えはTavianからのコメントの後に現れ、言葉遣いに非常に近いです。しかし、あなたの答えとTavianの最初のコメントはどちらも間違っています。 – SergeyA

関連する問題