Swift创建BST结构体报错:T.Type不符合Comparable类型
解决Swift中
argument type 'T.Type' does not conform to expected type 'Comparable'报错 我来帮你搞定这个问题,你的代码里有两个核心问题导致了这个报错,咱们逐个拆解:
问题1:初始化方法重复声明泛型参数
你的BST结构体已经在定义时指定了<T: Comparable>泛型约束,但在init方法里又额外写了init<T:Comparable>——这完全是画蛇添足,而且会让方法内部的T和结构体的T变成两个独立的泛型参数,直接导致类型不匹配。
问题2:创建Node时传入了类型而非实例
在self.root = Node(data : T)这一行,你错误地把类型T传给了Node的初始化方法,但Node的init(data: T)需要的是一个T类型的具体实例,也就是你初始化BST时传入的data参数。
修正后的完整代码
BST结构体
struct BST<T: Comparable> { let root: Node<T>? var count = 0 // 去掉重复的泛型声明,直接复用结构体的T约束 init(data: T) { // 传入实际的data实例,而非T类型 self.root = Node(data: data) count = 1 // 顺便初始化节点计数为1,符合逻辑 } }
Node类(优化协议实现)
另外,你的Node类虽然实现了==和<方法,但最好显式让它遵守Comparable协议,这样代码更规范:
class Node<T: Comparable>: Comparable { let data: T var left: Node? var right: Node? init(data: T) { self.data = data } // 实现Comparable协议要求的方法 static func == <T>(lhs: Node<T>, rhs: Node<T>) -> Bool { return lhs.data == rhs.data } static func < <T>(lhs: Node<T>, rhs: Node<T>) -> Bool { return lhs.data < rhs.data // 简化逻辑,直接返回比较结果 } }
这样修改后,你的代码就能正常编译运行了。
内容的提问来源于stack exchange,提问作者Bhargav
相关产品推荐
相关产品推荐

