resolución de typedef y espacios de nombres VS2010

Estoy trabajando en la creación de un motor de física (con la ayuda de un libro), y el libro sugiere que cree un espacio de nombres para que exista el motor, y para la primera parte declaro un 'typedef' para variables como esa

typedef float real;

y puedo entender que la explicación que da el autor es que "si la precisión necesita cambiar, entonces puede ir a esta línea y cambiarla, y luego tal vez tenga que cambiar como máximo 10 funciones auxiliares y claridad de representación, pero yo Creo que coincide con las otras dos cosas, así que espero que esto se pueda seguir.

el libro me pide que defina el typedef y las funciones auxiliares en un archivo (para minimizar el salto de archivo si se necesita un cambio), y luego lo incluya antes de que se compilen los otros archivos, y para hacer todo esto en un espacio de nombres (llamé Physics ), luego, en otro archivo, cree clases para usar en el motor. aunque el problema directo es con intellisense, y resolver

genFunction.h
namespace Physics{
typedef float real;
}


Classes.h
#include "genFunction.h"
namespace Physics{
class Vector3{
public :
    real x;   // visual studio is throwing that Physics::real is not a type name
    real y;
    real z;
    // VS is not offering collapsing, or any form of 
    // auto/assistance with lines.
    // almost like it does not want me to have classes
    // in my own namespaces
    Vector3(){ // uncolapsable 
        x = 0;
        y = 0;
        z = 0;
    }
};
}

¿Estoy haciendo algo mal teniendo en cuenta que el compilador está ignorando que hice una definición de tipo, y está dentro del alcance de dónde está ocurriendo el problema, y ​​​​luego el hecho de que VS ni siquiera muestra sugerencias mientras estoy dentro de una clase en un yo? El espacio de nombres hecho me preocupa un poco.

Editar: solución principal encontrada para la resolución de tipo. aparentemente en lugar de un { Yo puse un ( en uno de los métodos, y eso hizo que actuara como si el espacio de nombres completo no existiera. aunque VS todavía no me dará ningún tipo de asistencia (colapso de función/clase/espacio de nombres, o sugerencias de finalización incluso con ctrl+barra espaciadora) también tengo algunas funciones auxiliares que uso (pow hecho por mí mismo(), sqrt() ) que uso que causa errores de vinculación si no está en una clase, pero esto desaparece cuando los pongo en línea. ¿Es esto algo malo para resolver un enlazador?

preguntado el 10 de marzo de 12 a las 04:03

¿Ha comprobado la ortografía del archivo de cabecera? "genfunction.h" or "genFunction.h" ? -

esto es una generalización, y en mi código es lo mismo. corregido en cuestión -

El código como está escrito aquí se ve bien. El hecho de que el IDE no lo reconozca probablemente signifique que hay un error tipográfico en algún lugar anterior que no es (necesariamente) ilegal en sí mismo, pero está estropeando sus definiciones. Primero, puede intentar una reconstrucción limpia simple, a veces eso ayuda, y si no, probablemente necesitará publicar más código. Comience sacando los bits relevantes en un caso de prueba en su propia máquina. Si un mínimo ejemplo lo reproduce, podemos ayudar más. Si el ejemplo mínimo no lo reproduce, está en camino de encontrar el problema usted mismo. -

Tal vez ya sepa esto (y los omitió intencionalmente en sus fragmentos de código), pero debería usar incluir guardias en sus archivos de encabezado (en.wikipedia.org/wiki/Include_guard). Esta práctica estándar le ahorrará todo tipo de molestias a medida que su proyecto se haga más grande. -

@gardian06: Lo mejor es Siempre hay use include guards, sin importar cuáles sean las dependencias. FileA.h puede que solo tenga otro archivo que dependa de él para este proyecto, pero tal vez tenga más dependientes en otro proyecto. Usar siempre protectores de inclusión hará que sus archivos de encabezado estén más preparados para el futuro y sean más fáciles de reutilizar. -

1 Respuestas

En primer lugar, el compilador no es lanzamiento cualquier cosa. Como no ha dicho lo contrario, asumo que su código compila bien. El problema es Intellisense entonces, y nada más.

Intellisense en C++ es notoriamente inestable. A veces funciona, a veces no. Puede depender de las fases de la luna.

A veces puedes "animarlo" un poco siendo más explícito. si escribes ::, debe sugerir todos los miembros del espacio de nombres global. ::Physics:: y debe sugerir miembros de la Physics espacio de nombres

Puede ser solo una cuestión de esperar (¿o reiniciar VS o reconstruir?) hasta que decida volver a analizar su código.

respondido 10 mar '12, 09:03

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.