2017-02-27 87 views
0

剛試圖在最近的操場上編寫泛型類型的堆棧時發生了這個奇怪的錯誤。 我真的不明白這裏有什麼問題,有人可以向我解釋爲什麼我得到這個錯誤嗎?無法用類型爲'(T)'的參數列表調用'append'

class MyStack<T> { 
    var stack1 = [T]() 

    func push<T>(value: T) { 
     stack1.append(value) // Error: cannot invoke 'append' with an argument list of type '(T)' 
    } 
} 

回答

1

類是已經通用的,沒有必要進行推動通用太

​​

push被聲明爲push<T>,泛型參數將覆蓋在類中定義的一個。所以,如果我們要重命名泛型參數,我們會得到

class MyStack<T1> { 
    var stack1 = [T1]() 

    func push<T2>(value: T2) { 
     stack1.append(value) // Error: cannot invoke 'append' with an argument list of type '(T2)' 
    } 
} 

提出這樣的,它使我們不能在[T1]T2感。

+0

非常感謝!這真的很有幫助。 –

相關問題