2009-09-24 6 views
5

Aquí está mi código:¿Por qué el compilador de C++/CLI se confunde tan fácilmente con los símbolos?

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

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

El compilador de C#, por ejemplo, reconocerán que la única IEnumerable<T> que tiene en esos espacios de nombres es de System::Collections::Generic. ¿Por qué el compilador C++/CLI no puede hacer lo mismo? A menos que escriba su nombre completo o al menos Generic::IEnumerable<int>, no lo reconocerá y desencadenará un error C2872: símbolo ambiguo.

¿Falta algo aquí?

Respuesta

6

Teniendo en cuenta los espacios de nombres IEnumerable es ambigua

MS definir IEnumerable en tanto System::Collections y System::Collections::Generic cuál de los 2 quiere que su código usar?

+3

Erm, uno es genérico y el otro no? No debería ser difícil elegir cuál usar, y además, el compilador C# no se confunde. –

+2

¿Cómo sabe el compilador * por adelantado * que debe elegir la versión genérica? Todavía no ha analizado el '', e incluso cuando lo hace, primero debe determinar que '' 'es el comienzo de un tipo genérico, y no el operador' menos que '. Y todavía tiene que analizar C++ correctamente, por lo que no pueden cambiar arbitrariamente la forma en que analiza el código. – jalf

+3

Los lenguajes C# y C++ son diferentes y, por lo tanto, analizan el código de diferentes maneras – Mark

Cuestiones relacionadas