2

私はクラス、スクエアを持っています:

class Square
{
   typedef enum {kTop = 0x80, kRight = 0x40, kBottom = 0x20, kLeft = 0x10} Side;
   // Other functions and stuff
}

関数の 1 つに、aforの各辺を含む操作を実行するループがありますSquare。私はこのようにしました:

for (Square::Side side = Square::kLeft; side < Square::kLeft; side << 1) // Warning here
{
   // Do stuff
}

まず、ループは左側で機能し、次に側を 1 ポジション左にシフトして、側を下側と等しくします。ループが Top 側で操作を実行した後、for再び左にシフトし、数値からビットを押し出して、kLeft より小さい 0 に等しくし、ループが終了します。

ただし、「インクリメント式には効果がありません」という警告が表示されます。これは私のシフト操作が行われていないことを意味しますか?

4

2 に答える 2

3

シフトバックの値をサイドに割り当てていません。これを試して:

(Square::Side side = Square::kLeft; side < Square::kLeft; side = side << 1)

またはside <<= 1

終了条件も修正する必要があります。

side <= Square.kTop

于 2012-07-30T03:54:54.163 に答える
3

はい、そうです。最初の試行で停止条件が false であるためです。

Square::Side side = Square::kLeft

レンダリング

side < Square::kLeft;

間違い。

おそらく、あなたはside <= Square::kTopまたは類似した意味を持っていside <<= 1ました。

于 2012-07-30T03:53:22.767 に答える