2

好的,看来我之前的问题现在已经解决了(我把它留在下面以供参考)。然而,又一个突然出现 - 再次,似乎我错过了一些东西。在这段代码中,我声明了以下内容:

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);
    }
}

编译器抗议最近的.left 和最近的.right 不是属性,尽管最近的是二叉树!(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 编译器。

4

1 回答 1

4

我能看到的唯一错误是!函数参数中缺少:

BinaryTree!(T) findNearest (BinaryTree(T) x, T key) {

应该

BinaryTree!(T) findNearest (BinaryTree!(T) x, T key) {

其余的对我来说都很好。

于 2013-08-06T20:57:26.273 回答