2009-09-24 10 views
5

Oto mój kod:Dlaczego kompilator C++/CLI tak łatwo miesza się z symbolami?

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

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

kompilator C#, na przykład, będzie wiedział, że jedynym IEnumerable<T> ma w tych nazw jest od System::Collections::Generic. Dlaczego kompilator C++/CLI nie może zrobić tego samego? Jeśli nie piszę jego pełnej nazwy lub przynajmniej Generic::IEnumerable<int>, nie rozpozna tego i wywoła błąd C2872: niejednoznaczny symbol.

Czy tu czegoś brakuje?

Odpowiedz

6

Biorąc swoich nazw IEnumerable jest niejednoznaczna

MS określić IEnumerable zarówno System::Collections i System::Collections::Generic który z 2 chcesz Twój kod w użyciu?

+3

Grom, jeden jest ogólny, a drugi nie? Nie powinno być trudno wybrać, którego użyć, a ponadto kompilator C# nie jest przez to pomieszany. –

+2

W jaki sposób kompilator wie * z góry *, że powinien wybrać wersję ogólną? Nie przeanalizował on jeszcze '', a nawet gdy to robi, najpierw musi ustalić, że '<' jest początkiem typu ogólnego, a nie operatorem 'less than'. I nadal musi poprawnie parsować C++, aby nie mogły dowolnie zmieniać sposobu analizowania kodu. – jalf

+3

Języki C# i C++ są różne i dlatego parsować kod na różne sposoby. – Mark

Powiązane problemy