2010-10-17 16 views
13

In Xcode utilizzando LLVM 2.0, quando ho messo la linea using namespace std; nel mio codice C++, ottengo questo avvertimento:LLVM Compiler 2.0: Avviso con "using namespace std;"

Semantic Problema
Utilizzando direttiva riguarda implicitamente definito namespace 'std'

C'è un modo per risolvere questo problema? Perché sta dando questo avvertimento?

+1

Stai mettendo * solo * quella linea? – GManNickG

+2

Includete intestazioni con questo spazio dei nomi? – JoshD

+2

Xcode 4 è ancora sotto NDA; dovresti fare questa domanda nel forum beta dev di Apple, è l'unico forum in cui la NDA che hai inserito con Apple ti permette di chiedere. (https://devforums.apple.com/community/xcode4 - è necessario il login del programma apple dev per leggere/postare) –

risposta

24

Sono stati inclusi file di intestazione standard? Altrimenti il ​​compilatore non sa di namespace std.

Si prega di inviare più codice per chiarire.

+4

Ah, l'ho appena capito. Hai ragione, la riga 'using namespace std;' era la prima riga (oltre alle dichiarazioni #ifndef e #define ovviamente nel file; L'ho spostato dopo la riga '#include ' e ha eliminato l'avviso. GCC non ha mai dato questo avvertimento, quindi non ci avevo mai pensato prima. Grazie! –

4

Ho risolto questo problema come questo

#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

Spostamento del using namespace std a dopo il # include in grado di eliminare questo avvertimento.

-2

vedo che questa domanda è piuttosto vecchio, ma per chiunque controllare questo fuori in futuro, ho voluto aggiungere questo link dalla documentazione LLVM come supplemento per la discussione e per poeple alla ricerca di maggiori informazioni:

LLVM Coding Standards: Do Not use using namespace std;

Credo che il titolo sia piuttosto indicativo del motivo per cui l'ho condiviso per aiutare con questa domanda.

In LLVM, preferiamo prefissare esplicitamente tutti gli identificatori dallo spazio dei nomi standard con un prefisso "std ::", anziché affidarsi a "using namespace std;".

Nei file di intestazione, l'aggiunta di una direttiva 'using namespace XXX' inquina lo spazio dei nomi di qualsiasi file sorgente che # include l'intestazione. Questa è chiaramente una brutta cosa.

Modifica: Quindi, se si utilizza 'using std namespace;' digitare in modo esplicito std :: per ogni caso in cui si utilizza la libreria standard. Evita i conflitti con gli spazi dei nomi dei file di origine. Questo è ciò che la citazione sopra dell'articolo consiglia.

+0

Questo non fornisce una risposta alla domanda. Una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (http: // StackOverflow.com/help/privilegi/commento); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla recensione] (/ recensione/post di bassa qualità/13390173) – cpburnz

+0

Sono al lavoro e sto solo cercando di aiutare altre persone in situazioni simili fornendo una utile informazione che risolve questo problema. Penso che la risposta si aggiunga alle risposte già fornite. Se questo è problematico, lo prenderò semplicemente. Se fossi io a fare questa domanda, vorrei che qualcuno condividesse questa affermazione di llvm con me. –

+1

@cpburnz Immagino di essere nuovo per lo stile a cui è stato chiesto aiuto perché mi sarebbe utile. Nello specifico, cos'altro avrei potuto aggiungere a questa risposta poco chiara? È inteso come più di un suggerimento alternativo alle risposte già pubblicate. –

Problemi correlati