2017-01-05 10 views
0

以下の行にコンパイルエラーが表示されていますが、完全に理解できません。 msdnによると、構文は正しいです。discrete_distributionのC++コンパイルエラー

vector<int> temp_weights = //some data will be here 

discrete_distribution<int> weights ({ temp_weights.begin(), temp_weights.end() }); //error C2440 

完全なエラーは次のとおりです。

Error 5 error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::discrete_distribution<int>' 
+0

あなたの完全なコンパイラのバージョンに注意してくださいするためにこれは動作するはずです。 – tambre

+0

@tambre:Visual Studio C++ 2013 Update 5 – oleole

答えて

3

discrete_distribution<int> weights { temp_weights.begin(), temp_weights.end() };

それが初期化リストの構文ですので、これが動作しない理由は、 コンパイラはあなたがtemp_weights.begin()を保存したいと考えてweights[0]および temp_weights.end(),weights[1]である。

は、(全体のベクトルの要素をコピーするために)2 vector::iterator年代を受け取るコンストラクタがあるはず、とあなたは

discrete_distribution<int> weights (temp_weights.begin(), temp_weights.end());

+0

thxですが、私のバージョンにこのようなコンストラクタはありません。エラーが発生します: 'エラーエラーC2661: 'std :: discrete_distribution : :discrete_distribution ':オーバーロードされた関数が2つの引数を取ることはありません。' – oleole

+0

残念ながら、このエラーは、vs2013のバージョンのバグが原因である可能性があります[source](http://stackoverflow.com/questions/31175655/defining-a-discrete-probability-distribution -in-c) – George

+0

まあ、それを指摘してくれてありがとう。私は更新しようとします。 – oleole

関連する問題