2012-08-09 10 views
6

esto es parte de mi código para el motor de mi juego en el que estoy trabajando. Cuando construyo/depuración del código, se detiene con un error del compilador: "Camera.cpp (70): error C2059: error de sintaxis: '=='" y la línea 70 es la líneaError de sintaxis "=="

if (near == far). También sucede en la línea 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; 
     } 
    } 
} 

tengo otras funciones que utilizan el operador == de la misma manera, pero no recibirá un error. Gracias si tiene alguna sugerencia ...

+3

¿No es 'far' una palabra reservada? – asawyer

+0

@asawyer: No, estás pensando en 'para' :) –

+1

@PeterAlexander No, estoy pensando en punteros lejanos. – asawyer

Respuesta

17

Hace muchos años (en una galaxia muy, muy lejana) near y far fueron palabras clave. Parece que tu compilador todavía piensa que sí, probablemente esté intentando ser útil.

Debe elegir diferentes nombres, o averiguar cómo desactivar esta particular 'característica' compatible con versiones anteriores.

+0

Gracias por la información, también me encanta la referencia de Star Wars. +1 – Annabelle

+0

Guau ... Me alegro de no haberme encontrado con esa. No hubiera pensado en verificar eso en años: p –

+0

Sí, gran referencia de Star Wars. Muchas gracias por la respuesta útil. ¡Funcionó excepcionalmente! – Niro56

10

Usted está codificando para las ventanas y en las ventanas si se incluyen windows.h o un archivo que incluye (y desde luego que incluirlo, porque tiene una llamada al cuadro de mensaje) y luego far y near están ambos definidos en windef.h y no puede usarlos como nombres de variable

+0

¿Funcionaría un simple '# undef' para resolver la situación? – Dai

+0

En realidad windows no usa 'far' y' near' ya que está ahí para compatibilidad, por lo que puede definirlos usando '# undef' y todo estará bien, pero es mucho más limpio cambiar el nombre de sus variables, ya que es cierto que 'Hace muchos años (en una galaxia muy, muy lejana) cerca y lejos había palabras clave ...' – BigBoss

+0

Me viene a la mente una campaña que tuve antes para reescribir los archivos de encabezado de Windows (http://stackoverflow.com/questions/6146978/is-it-a-good-idea-to-recreate-win32s-headers). Tal vez debería seguir adelante ... – Dai

3

También es peligroso comparar carrozas con ==. No es posible representar cada número con absoluta precisión. Creo que las principales implementaciones flotantes ieee solo son buenas para 6 lugares significativos. Encontrarás dos formas o calculando lo que debería ser el mismo número que será 0.000001 o menos y por lo tanto no será igual.

+1

Pero esto no responde la pregunta sobre el error de sintaxis. – Marlon

+5

@StackUnderflow Quizás, pero podría responder preventivamente al siguiente: P – asawyer