2009-09-24 4 views
5

Ecco il mio codice:Perché il compilatore C++/CLI si confonde facilmente con i simboli?

using namespace System; 
using namespace System::Collections; 
using namespace System::Collections::Generic; 

namespace Tests { 
    ref class MyCollection : public IEnumerable<int> <----HERE! 

Il compilatore C#, per esempio, riconosceranno che l'unica IEnumerable<T> che ha in tali spazi dei nomi da System::Collections::Generic. Perché il compilatore C++/CLI non può fare lo stesso? A meno che non digiti il ​​suo nome completo o almeno Generic::IEnumerable<int>, non lo riconoscerà e genererà un errore C2872: simbolo ambiguo.

Mi manca qualcosa qui?

risposta

6

dato il vostro namespace IEnumerable è ambigua

MS definire IEnumerable sia System::Collections e System::Collections::Generic quale dei 2 volete che il vostro codice da usare?

+3

Erm, uno è generico e l'altro no? Non dovrebbe essere difficile scegliere quale usare, e inoltre, il compilatore C# non è confuso da esso. –

+2

Come fa il compilatore a sapere * in anticipo * che dovrebbe scegliere la versione generica? Non ha ancora analizzato il '', e anche quando lo fa, deve prima stabilire che '' 'è l'inizio di un tipo generico, e non l'operatore' minore di'. E deve ancora analizzare correttamente C++, in modo che non possano cambiare arbitrariamente il modo in cui analizza il codice. – jalf

+3

I linguaggi C# e C++ sono diversi e quindi analizzano il codice in modi diversi – Mark

Problemi correlati