Domanda

Sto cercando di creare un nuovo progetto .NET C ++ da zero. Sto progettando di mescolare codice gestito e non gestito in questo progetto.

questo thread del forum IDataObject: errore simbolo ambiguo risponde a un problema che ho visto più volte.

Stati n. 4 " Sposta tutto 'usando lo spazio dei nomi XXXX' da .h a .cpp "

sembra una buona idea, ma ora nei miei file di intestazione devo fare riferimento a parametri di .NET Framework come

void loadConfigurations(String^ pPathname);

Come posso spostarmi usando le istruzioni nel file .cpp e usare gli spazi dei nomi corrispondenti nel file .h?

È stato utile?

Soluzione

È una buona idea usare sempre nomi completi nei file di intestazione. Poiché l'istruzione using influisce su tutto il codice seguente indipendentemente da #include, l'inserimento di un'istruzione <=> in un file di intestazione influisce su tutti coloro che potrebbero includere tale intestazione.

Quindi cambieresti la tua dichiarazione di funzione nel tuo file header in:

void loadConfigurations(SomeNamespace::String^ pPathname);

dove SomeNamespace è il nome dello spazio dei nomi che eri <=> in precedenza.

Altri suggerimenti

Non so molto su .NET, quindi la mia risposta si applica solo alla parte c ++ non gestita della tua domanda. Personalmente, questo è uno dei motivi principali che evito come la peste & Quot; usando lo spazio dei nomi XXXX; & Quot; dichiarazioni.

Preferisco essere esplicito con spazi dei nomi come " std :: cout < < " ciao mondo " lt &; lt &; std :: endl; quot &;

Questo evita collisioni nello spazio dei nomi e non c'è mai alcuna ambiguità su da dove provenga qualcosa. Inoltre, quando fai qualcosa come & Quot; usando lo spazio dei nomi std; & Quot; stai quasi annullando ciò che ti danno gli spazi dei nomi. Sono stati progettati per evitare le collisioni e importando tutto nel globale, è sufficiente invitare nuovamente le collisioni.

Questa è rigorosamente una questione di opinioni e gusti.

Per quanto riguarda cosa fare nelle intestazioni, scrivo solo cose come questa: " void f (const std :: string & amp; s); "

Per risolvere questo, l'ho fatto nel file .h:

namespace TestClassNS
{
  class TestClass;
}

e poi nel file .cpp aggiungerei #h. in cui si trovava TestClass e lì farei lo spazio dei nomi usando TestClassNS.

Il mio C ++ è arrugginito, quindi potrebbe esserci un modo migliore.

Nella mia esperienza, l'unico spazio dei nomi di cui devi stare attento è il Sistema stesso. È un po 'fastidioso che il più comune, il più importante sia quello in cui trovi problemi, ma questa è la vita.

Almeno puoi conforto che se stai creando classi gestite, i tuoi problemi con include otterranno sollievo alla barriera dell'assemblaggio, a differenza dei problemi con i file di intestazione per le classi non gestite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top