2016-12-12 20 views
0

私は初心者です。vector insert()警告メッセージ

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory(208): warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data 
1>   C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xmemory(280) : see reference to function template instantiation 'void std::allocator<_Ty>::construct<double&>(int *,_Other)' being compiled 
1>   with 
1>   [ 
1>    _Ty=int, 
1>    _Other=double & 
1>   ] 
1>   C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vector(668) : see reference to function template instantiation 'void std::_Cons_val<std::allocator<_Ty>,int,double&>(_Alloc &,_Ty1 *,_Ty2)' being compiled 
1>   with 
1>   [ 
1>    _Ty=int, 
1>    _Alloc=std::allocator<int>, 
1>    _Ty1=int, 
1>    _Ty2=double & 
1>   ] 
1>   C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vector(688) : see reference to function template instantiation 'void std::vector<_Ty>::emplace_back<double&>(_Valty)' being compiled 
1>   with 
1>   [ 
1>    _Ty=int, 
1>    _Valty=double & 
1>   ] 
1>   C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vector(675) : see reference to function template instantiation 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::emplace<double&>(std::_Vector_const_iterator<_Myvec>,_Valty)' being compiled 
1>   with 
1>   [ 
1>    _Myvec=std::_Vector_val<int,std::allocator<int>>, 
1>    _Ty=int, 
1>    _Valty=double & 
1>   ] 
1>   preprocessDoc.cpp(14054) : see reference to function template instantiation 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::insert<double&>(std::_Vector_const_iterator<_Myvec>,_Valty)' being compiled 
1>   with 
1>   [ 
1>    _Myvec=std::_Vector_val<int,std::allocator<int>>, 
1>    _Ty=int, 
1>    _Valty=double & 
1>   ] 

コードはコンパイルされますが、この警告は取り除きたいと思います。私は警告を取得していますラインは次のとおりです。

void PreprocessDoc::AddDisplay(double d_display, int pattern) 
{ 
    if(pattern==1) 
    { 
     d_displayYT.insert(d_displayYT.end(), d_display); //this line 
     YTtoYrn(); 
    } 
} 

すべてのヘルプは良い

+1

警告はかなり明確ですIMO。 'double'を' int'に変換すると、数値が小数点を超えて失われます。 *** static_cast (d_display)を使って***を本当に望んでいることを明確にしてください。 –

+1

答えはありませんが、考慮すべき点です。このコードを単純化するためにvector :: push_back()メソッドを見てください。 –

答えて

1

変更し、次のようになります。

d_displayYT.insert(d_displayYT.end(), d_display); //this line 

へ:

d_displayYT.insert(d_displayYT.end(), static_cast<int>(d_display)); 
+4

私たちはとても急いでいるでしょうか? 'd_displayYT'とは何ですか?また、なぜダブルが必要ですか?これは質問に対する答えですが、健全なアドバイスではないかもしれません... –

+0

ありがとうDavid!ベン、 'd_displayYT'の型は' int'です – Leo001

2
_Myvec=std::_Vector_val<int,std::allocator<int>>, 

コンパイラれますあなたがダブルを変換していることを伝えるintに。倍数が42.666と書かれている場合、格納される内容は42です。これが意図されていない場合に警告します。

これが本当に必要な場合はDavid suggestsとしてください。そうでなければ、ベクトルが保持する型を変更する必要があります。