2015-06-19 59 views
1

我需要在我的項目中使用IDictionary當我添加此編譯器不喜歡它,並報告一個明顯的錯誤 」錯誤C2872 :「IDictionary的」:不明確的符號」但是,如果我創建一個新的樣本項目的編譯器永遠不會報告任何錯誤如何解決「錯誤C2872:'IDictionary':模棱兩可的符號[VS2012 - C++/CLI]

Below is the code snippet 
Temp.h 
#pragma once 
#using "System.dll" 

using namespace::System; 
using namespace::System::Collections; 
using namespace::System::Collections::Specialized; 

public ref class MyCollection : public NameObjectCollectionBase { 

private: 
DictionaryEntry^ _de; 

// Gets a key-and-value pair (DictionaryEntry) using an index. 
public: 
property DictionaryEntry^ default[ int ] { 
     DictionaryEntry^ get(int index) { 
    _de->Key = this->BaseGetKey(index); 
     _de->Value = this->BaseGet(index); 
     return(_de); 
    } 
    } 

    // Adds elements from an IDictionary into the new collection. 
    MyCollection(IDictionary^ d) { 

    _de = gcnew DictionaryEntry(); 

    for each (DictionaryEntry^ de in d) { 
    this->BaseAdd((String^) de->Key, de->Value); 
     } 
    } 

    // Removes an entry with the specified key from the collection. 
    void Remove(String^ key) { 
    this->BaseRemove(key); 
    } 

    // Removes an entry in the specified index from the collection. 
    void Remove(int index) { 
    this->BaseRemoveAt(index); 
    } 
    }; 
+0

將'using namespace'指令放在.h文件中是很危險的,特別是當您使用這樣一個過時的.NET 1.x名稱空間時。您將在另一個使用IDictionary的通用版本的源文件中包含該文件,並且編譯器不能再計算出您想要的文件。只是不要那樣做。 –

回答

2

由於您的應用程序在不同的命名空間的更多的是一個IDictionary接口,你就必須完全限定參考。例如:

System::Collections::IDictionary^ d 

或者其他IDictionary類型的名稱空間是什麼。

或者,您可以刪除其中一個名稱空間的using語句。

+0

是的,如果我明確提到路徑,我不會得到錯誤。 –

相關問題