2011-05-17 68 views
4

請記住,此代碼在C#中工作,但不在VC++。net(真氣)中。我想知道我的錯誤在哪裏。.net與通用方法的接口,執行錯誤

給予代碼:

public interface class iTest 
{ 
    public: 
    generic <typename T> 
    virtual void AddCriteriaList(List<T> ^CriterionList); 
}; 

generic <typename Q> 
public ref class IUseInterface : iTest 
{ 
    public: 
    generic <typename T> 
    virtual void AddCriteriaList(List<T> ^CriterionList) 
    { 

    } 
}; 

我得到的錯誤錯誤C3766: 'IUseInterface' 必須提供的接口方法「無效ITEST :: AddCriteriaList(系統::集合的實現::一般::名單^)'

奇怪的是,如果我刪除IUseInterface上的通用約束(Q),錯誤消失。我不明白如何使我的類通用與任何具體函數的泛型有關。

任何想法?由於

+0

完全不同的語言...... – 2011-05-17 14:11:01

+0

它們非常相似,在這種情況下應遵循相同的編譯規則。 – greggorob64 2011-05-17 14:13:05

回答

1

好吧,看來編譯就好了,如果你不使用List參數,並只使用T參數。只需將它們全部添加到循環或其他內容中,它只需添加幾行額外的代碼,但會爲您編譯。

+1

非常精明。你很聰明。 – greggorob64 2011-05-18 14:30:54

+0

爲什麼感謝你。這是一個非常精明的陳述。你先生,是我們所有人中最聰明的人。 – espais 2011-05-18 17:04:41

1

我沒有對的答案,但這個作品,如果它是配不上你:

generic <typename T> 
public interface class iTest 
{ 
    public: 
    virtual void AddCriteriaList(List<T> ^CriterionList); 
}; 

generic <typename Q, typename T> 
public ref class IUseInterface : iTest<T> 
{ 
public: 
    virtual void AddCriteriaList(List<T> ^CriterionList) 
    { 
    } 
}; 
+0

我很努力地想讓任何解決方案都沒有iTest本身的通用性。我有一個iTests集合,如果我輸入它們,它們必須都具有相同的約束,例如,Dictionary ^>將無法工作。謝謝 – greggorob64 2011-05-17 14:31:21