2010-10-17 15 views
13

En Xcode usando LLVM 2.0, cuando puse la línea using namespace std; en mi código C++, me sale esta advertencia:LLVM Compiler 2.0: Advertencia con "using namespace std;"

cuestión semántica
Usando Directiva se refiere a definido implícitamente-espacio de nombres 'std'

¿Hay alguna manera de arreglar esto? ¿Por qué está dando esa advertencia?

+1

¿Estás poniendo * solo * esa línea? – GManNickG

+2

¿Incluye algún encabezado que tenga ese espacio de nombres? – JoshD

+2

Xcode 4 aún está bajo NDA; deberías hacer esta pregunta en el foro beta de desarrollo de Apple, es el único foro que la NDA que ingresaste con Apple te permite preguntar. (https://devforums.apple.com/community/xcode4 - se requiere que su programa de desarrollo de Apple inicie sesión para leer/publicar) –

Respuesta

24

¿Ha incluido algún archivo de encabezado estándar? De lo contrario, el compilador no sabe acerca de namespace std.

Por favor, publique más código para aclarar.

+4

Ah, acabo de descubrirlo. Tiene razón, la línea 'using namespace std;' fue la primera línea (además de las instrucciones #ifndef y #define del curso) en el archivo; Lo moví después de la línea '#include ' y eliminó la advertencia. GCC nunca dio esa advertencia, así que nunca pensé en eso antes. ¡Gracias! –

4

i resolvieron este problema como este

#include <iostream> 

using namespace std; 
/// This function is used to ensure that a floating point number is 
/// not a NaN or infinity. 
inline bool b2IsValid(float32 x) 
{ 
    if (x != x) 
    { 
     // NaN. 
     return false; 
    } 
    float32 infinity = std::numeric_limits <float32>::infinity(); 
    return -infinity < x && x < infinity; 
    return true; 

} 
3

Mover el espacio de nombres std para después de la # include puede eliminar esta advertencia.

-2

veo que esta pregunta es bastante viejo, pero para cualquier comprobación de esto en el futuro, quería añadir este enlace a la documentación LLVM como un suplemento a la discusión y para Poeple en busca de más información:

LLVM Coding Standards: Do Not use using namespace std;

Creo que el título es bastante indicativo de por qué lo he compartido para ayudar con esta pregunta.

En LLVM, preferimos prefijar explícitamente todos los identificadores del espacio de nombres estándar con un prefijo "std ::", en lugar de confiar en "using namespace std;".

En los archivos de encabezado, agregar una directiva 'using namespace XXX' contamina el espacio de nombres de cualquier archivo fuente que # incluya el encabezado. Esto es claramente algo malo.

Edit: Por lo tanto, si utiliza 'using std namespace;' escriba explícitamente std :: para cada caso en que use la biblioteca estándar. Evita conflictos con espacios de nombres de archivos de origen. Esto es lo que aconseja la cita anterior del artículo.

+0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (http: // stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la crítica] (/ review/low-quality-posts/13390173) – cpburnz

+0

Estoy en el trabajo y estoy tratando de ayudar a otras personas en situaciones similares al proporcionar una información útil que aborda este problema exacto. Creo que la respuesta se suma a las respuestas ya proporcionadas. Si esto es problemático, simplemente lo desmontaré. Si fuera yo quien hiciera esta pregunta, me gustaría que alguien compartiera esa declaración de llvm conmigo. –

+1

@cpburnz Supongo que soy nuevo en el estilo en el que se pide ayuda, porque para mí sería útil. Específicamente, ¿qué más podría haber agregado a esta respuesta poco clara? Se pretende como una sugerencia más para las respuestas ya publicadas. –

Cuestiones relacionadas