好的,看来我之前的问题现在已经解决了(我将其留在下面以供引用)。然而,又一个问题出现了——再次,似乎是我错过的东西。在此代码中,我声明了以下内容:
private:
T _data;
BinaryTree!(T) _left;
BinaryTree!(T) _right;
在此之后,我声明了这些:
public:
@property T data() {return _data;}
@property BinaryTree!(T) left() {return _left;}
@property BinaryTree!(T) right() {return _right;}
然后,我实现了以下功能:
void add (T data) {
BinaryTree!(T) nearest = findNearest(this, data);
if (nearest.data > data) {
nearest.left = new BinaryTree!(T) (data);
}
else {
nearest.right = new BinaryTree!(T) (data);
}
}
编译器抗议nearest.left 和nearest.right 不是属性,尽管nearest 是BinaryTree!(T),这看起来相当奇怪。我错过了什么?
老问题:
我最近开始学习 D,并试图构建一个二叉树实现,作为测试我通过阅读所学到的知识的一种方法。现在,我首先声明如下:
class BinaryTree(T)
我认为这将使我能够参数化该类所拥有的一些内容。更具体地说:
T _data;
BinaryTree!(T) _left;
BinaryTree!(T) _right;
现在,我尝试写这个:
BinaryTree!(T) findNearest (BinaryTree(T) x, T key) {
if (x.hasNoChildren || x.data == key) {
return x; //found it
}
else {
auto compare = x.data;
if (compare > key) {
return find (x.left, key);
}
else {
return find (x.right, key);
}
}
}
此后,编译器大声提示我的函数没有返回类型。我在这里做错了什么?如果有助于解释的话,我有 Java 背景,并且在 Xamarin Studio 中使用 dmd 编译器。
最佳答案
我看到的唯一错误是函数参数中缺少 !
:
BinaryTree!(T) findNearest (BinaryTree(T) x, T key) {
应该是
BinaryTree!(T) findNearest (BinaryTree!(T) x, T key) {
其余部分对我来说看起来不错。
关于d - D 中的参数化类型和返回值为什么不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18090252/