2009-09-24 40 views
5

這裏是我的代碼:爲什麼C++/CLI編譯器會如此輕鬆地使用符號混淆?

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

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

C#編譯器,例如,將認識到,擁有國內唯一的IEnumerable<T>這些命名空間是System::Collections::Generic。爲什麼C++/CLI編譯器不能做到這一點?除非我輸入它的全名或至少Generic::IEnumerable<int>,否則它將不會識別它並將觸發C2872錯誤:模棱兩可的符號。

我在這裏錯過了什麼嗎?

回答

6

鑑於你的命名空間IEnumerable的是模糊的

MS兩種System::CollectionsSystem::Collections::Generic定義的IEnumerable其中2你想你的代碼使用?

+3

呃,一個是通用的,另一個不是?不應該很難選擇使用哪一個,此外,c#編譯器不會被它所迷惑。 –

+2

編譯器如何預先知道它應該選擇通用版本?它還沒有解析'',即使是這樣,它首先需要確定'<'是泛型類型的開始,而不是'少於'運算符。它仍然需要正確解析C++,所以它們不能隨意更改它解析代碼的方式。 – jalf

+3

C#和C++語言是不同的,因此以不同的方式解析代碼 – Mark