1

だからここに動作するコードがあります。変更せずに投稿しました。0 から 1024 の間でなければならない X 値と Y 値があります。tyleSize は 1024 です。

//X の場合

int loffx=accurate(curphisobj->x) + (rand() % 100) - 50; //some math, doent matter
loffx=max(loffx,1);
loffx=min(loffx,tyleSize);

//Yについて

int loffy=accurate(curphisobj->y) + (rand() % 100) - 50;
loffy=max(loffy,1);
loffy=min(loffy,tyleSize-3);

しかし、私が次のように書くと:

int loffy=min(max(accurate(curphisobj->y) + (rand() % 100) - 50,1),tyleSize - 2);
int loffx=min(max(accurate(curphisobj->x) + (rand() % 100) - 50,0),tyleSize);

loffx と loffy 1034、1029、-5、-2 など、あらゆる種類の番号が最大値と最小値でカットされていません。

C++ コンパイラについて私が知らないことはありますか、それともばかげた間違いがありますか?

4

1 に答える 1

9

他の場所で定義された一部のマクロではなく、のminおよびmax関数を実際に使用していることを確認してください。<algorithm>たとえば、Windows ヘッダーは次のようにwindef.h定義します。max

#define max(a,b)  (((a) > (b)) ? (a) : (b))

randこれは、各引数を 2 回評価する可能性があり、設計上毎回異なる結果を返すため、コードでは機能しません。

前処理後にソースを表示して、マクロを使用しているかどうかを確認してください。NOMINMAXヘッダーを含める前に定義することで、Windows マクロをオフにすることができます。

于 2013-07-19T21:37:26.477 に答える