ottenere errore per simbolo ambiguo e bisogno di aiuto per rimuoverlo

sto ricevendo questo errore che non riesco a rimuovere in Visual Studio 2010. Sto usando una libreria di terze parti che utilizza la propria definizione per “stringa” Anche il file xstring di Visual Studio è lì nella cartella in cui viene installato. ora quando sto provando a compilare il codice sto ottenendo l’errore seguente

1> … \ xyz.cpp (24): errore C2872: ‘stringa’: simbolo ambiguo 1> potrebbe essere ‘percorso libreria di terze parti \ string.h (31) 1> o’ c: \ programmi file (x86) \ microsoft visual studio 10.0 \ vc \ include \ xstring (2063): std :: string ‘

il compilatore non è in grado di capire quale definizione di stringa dovrebbe usare. Come posso rimuovere questo errore in Visual Studio 2010. Voglio che il codice utilizzi la definizione di stringa di terze parti.

Ho provato a impostare il percorso di terze parti nella directory include, ma sto ancora vedendo questo errore. Mi aiuti per favore. Grazie in anticipo

Questo è un esempio di uno scontro di namespace . Probabilmente hai nel tuo codice:

#include <3rdPartyString.h> // declaration of 3rd party string type #include  // declaration of std::string using namespace 3rdPartyNamespace; using namespace std; ... string myStr; // which string type? 

Il compilatore ora non sa quale stringa vuoi usare – una da libreria di terze parti o una STL. È ansible risolvere questa ambiguità anteponendo il nome dello spazio dei nomi al tipo:

 3rdPartyNamespace::string myStr; // if you want to use string from 3rd party library 

o

 std::string myStr; // if you want to use STL string 

Non posizionare mai using namespace namespace_name; nelle intestazioni ma cerca di evitarlo anche nei file di origine. La migliore pratica è quella di anteporre il nome del tipo, poiché questo non inquina il tuo attuale spazio dei nomi con l’altro, evitando così scontri nello spazio dei nomi.

Namespace sono stati inventati per prevenire queste ambiguità. Assicurati di non usare mai lo using namespace std (che lo specifico using namespace è comunque una ctriggers pratica, e ” std:: ” non è così lungo da digitare) e dovrebbe andare bene, basta usare std::string se vuoi la stringa standard .

 // Without "using namespace std;" string foo; // string from third party library used. std::string bar; // string from standard library used. 

Le due definizioni di stringa si scontrano tra loro in modo che il compilatore non sappia cosa usare, quindi è necessario un modo per differenziare i due ed è qui che entrano gli spazi dei nomi.

È ansible utilizzare lo spazio dei nomi utilizzato dalla stringa di terze parti quando si fa riferimento a tale stringa poiché gli errori che si stanno visualizzando implicano che si sta using namespace std nel codice.

Recentemente mi sono imbattuto in questo problema aggiungendo un progetto Libreria di classi a una soluzione molto grande che includeva una libreria String interna, l’ using namespace System; nell’intestazione pre-generata stava causando l’ambiguità.

C’è System.String. Se non si intende utilizzare, assicurarsi di indicare diversamente. Esempio System :: String o Custom :: String