【发布时间】:2020-10-13 04:06:48
【问题描述】:
我正在尝试为二叉树编写一个类。树类本身只有指向根节点的指针,然后树内的节点指向其他节点。根据树的应用,我是每个节点也有用户指定的类型数据,所以我将节点类设为通用类型 T。由于节点类在 T 中是通用的,在我看来我必须制作树T 中的泛型类也是如此,因此我可以将 T 传递给我在创建树时创建的一个空节点。
这是我的测试代码:
enum NodeKind {
case notAssigned
case leaf
case tree
}
class Node<T> {
var kind = NodeKind.notAssigned
var parent: Node<T>? // if a tree node, pointer to parent node, else nil
var child0: Node<T>? // if a tree node, points to a child if it exists, else nil
var child1: Node<T>? // optionals are automatically inited to nil
var data: T // data type of the user data
init( data: T) {
self.data = data
}
}
class BinaryTree<T> {
var root: Node<T> // pointer to the root of the binary tree
init( data: T) {
root = Node<T>( data: T) // create one empty node at the root
}
}
var testTree = BinaryTree<Int>( data: 5)
我的意图是最后一条语句应该创建一个 BinaryTree 实例,其中的节点包含 Int 类型的用户数据,并且 var testTree 的根应该指向一个具有数据 == 5 且没有子节点和父节点的单个节点实例。
但是,最后一行出现编译器错误:
Cannot convert value of type 'T.Type' to expected argument type 'T'
有各种建议的修复方法,但都没有奏效。这个要怎么写?
其次,“T.Type”是什么意思?我不熟悉这个结构。
谢谢,埃里克
【问题讨论】: