好的,似乎我的先前问题现在已经解决了(我把它留在下面作为参考)。然而,又一次出现 - 再次,似乎是我失踪的东西。在此代码中,我宣布了以下内容:
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不是属性,尽管最近的是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编译器。
答案 0 :(得分:4)
我能看到的唯一错误是函数参数中缺少!
:
BinaryTree!(T) findNearest (BinaryTree(T) x, T key) {
应该是
BinaryTree!(T) findNearest (BinaryTree!(T) x, T key) {
其余的看起来很好。