警告 - 符号付き整数式と符号なし整数式の比較 [-Wsign-compare] 解決方法
2022-02-10 18:36:23
<スパン ソースプログラムは
/********************* generates the observation model ****************************/
void ProRobotics::GenObservations(float sd)
{/Generate observations. Assume that the sensor can observe all features within sd meters of the robot
Point2f delta; //Save the difference between the robot's pose and the position of the landmarks
float dst;
float theta; //save feature angles, w.r.t robot frame
observations.clear();
for(int i = 0; i < landmarks.size(); i++)
{
delta = landmarks.at(i) - Point2f(realPathpoints.back().x,realPathpoints.back().y);
dst = norm(delta);
if(dst < sd)
{
theta = atan2(delta.y,delta.y) - realPathpoints.back().z;
dst += GenGaussianValue(sigma_r*sigma_r);
theta += GenGaussianValue(sigma_phi*sigma_phi);
AngleWrap(theta);
observations.push_back(Point3f(dst,theta,i));
}
}
}
プロンプトを表示してコンパイル for(int i = 0; i < landmarks.size(); i++) warning: /home/congleetea/nav/ProRobotics/prorobotics.cpp:303: warning: signed and unsigned integer expression [-Wsign-compare] の比較です。この警告の目的は、負の符号付きデータが符号なしに変換され、思うようにデータが大きくならないことを防ぐためで、ご存知のように符号付きデータと符号なしデータは範囲が異なります。
ここで for(int i = 0; i < landmarks.size(); i++), i は符号付き整数で landmarks.size() は符号なし整数なので、符号付き整数と符号なし整数の比較を促しています。解決策は
<スパン
1) この文章を for(vector<Point2f>::size_type i = 0; i < landmarks.size(); i++) に変更する この方法はより正確である。
Point2f はランドマークのデータ型です。
.
size_typeはstringクラス型とvectorクラス型で定義された、任意の文字列オブジェクトやvectorオブジェクトの長さを保持する型であり、標準ライブラリの型ではsize_typeは符号なし型として定義されています。
2)この文章を for(std::size_t i = 0; i < landmarks.size(); i++) に置き換える。
size_t型は、C言語標準ライブラリのヘッダファイルであるcstddefで定義されています
stddef.h
この型のC++版。機械依存の符号なし型であり、メモリに格納されるオブジェクトの大きさを保証するのに十分な大きさである。添え字のある要素にアクセスする場合、ベクターはvector:を使用します。
size_type
を添え字の型として使用し、一方
配列
の添え字は、正しい型であるsize_tです。
関連
-
Linux の 'pthread_create' への未定義参照問題を解決しました。
-
の 0x091f11c7 での未処理例外について。0xC0000005: アクセス違反の読み取り位置 0x0ab0f
-
C++:ソースファイルを開くことができない問題
-
戦闘機ゲームのC++実装(ソースコード)
-
C++-コラムフィッティングフィットシリンダー
-
C++ - 文字列クラス超詳細紹介
-
gcc/g++ コンパイル時のエラー解析で期待される型指定子の前に
-
不完全なクラス型へのポインタが許可されていないのですが、どのようなエラーですか?
-
C/C++ におけるランダム関数 rand() および srand() の使用法
-
C++11 ランダムライブラリ乱数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
c++ プログラミング プロンプトの関数定義はここでは許可されません。
-
C++11での移動セマンティクス(std::move)と完全な前進(std::forward)。
-
解決策:エラー:'cout'は型名ではありません。
-
C++コンパイルエラー:||error: ld returned 1 exit status|.
-
c++ std::move Principle の実装と使用法のまとめ
-
34:5: エラー: 制御が非ボイド関数の終わりに達する可能性がある [-Werror,-Wreturn-type] エラー解析
-
警告:組み込み関数 'malloc' の互換性のない暗黙の宣言を修正する方法
-
gccコンパイルエラーの一覧
-
C++: エラー C2280: 削除された関数を参照しようとしています。
-
[エラー]'cout' はこのスコープで宣言されていません。