6

これは、私が取り組んでいるゲーム エンジンへのコードの一部です。コードをビルド/デバッグすると、「Camera.cpp(70): エラー C2059: 構文エラー: '=='」というコンパイラ エラーで停止し、70 行目は

if ( near == far )ライン。75 行目でも発生します。

(if near == NULL || far == NULL)

bool Camera::SetClippingPlanes( float near, float far )
{
    if (near == far)  //Line 70(First Error)
    { 
        MessageBox(NULL, L"ERROR: The far and near clipping planes cannot be equal!", L"Error", MB_OK | MB_ICONERROR);
        return false;
    }
    else
    {
        if (near == NULL || far == NULL)  //Line 75(Second Error)
        {
            MessageBox(NULL, L"ERROR: Near and/or Far clipping planes are null!", L"Error", MB_OK | MB_ICONERROR);
            return false;
        }
        else
        {
            nearPane = near;
            farPane = far;
            return true;
        }
    }
}

== 演算子を同じ方法で使用する他の関数がありますが、エラーは発生しません。何か提案があればありがとう...

4

3 に答える 3

17

何年も前に(遠く離れた銀河で)nearfarキーワードでした。あなたのコンパイラはまだそれらがそうであると考えているようです - それはおそらく助けようとしています.

別の名前を選択するか、この特定の下位互換性のある「機能」をオフにする方法を見つける必要があります。

于 2012-08-09T20:32:22.250 に答える
10

windows.h またはそれを含むファイルを含める場合( MessageBox への呼び出しがあるため、確かにそれを含めます)、far両方nearで定義されてwindef.hおり、それらを変数として使用することはできません。名前

于 2012-08-09T20:38:22.800 に答える
3

float を == と比較することも危険です。すべての数値を絶対精度で表すことはできません。主な ieee フローティングの実装は、6 つの重要な場所にのみ有効であると思います。あなたは2つの方法を見つけるか、同じ数であるべきものを計算すると、0.000001以下になるため、等しくなりません。

于 2012-08-09T20:43:46.077 に答える