2017-02-27 50 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

非常感谢!这真的很有帮助。 –

相关问题