参数化类型和D中的返回值为什么这不起作用?

时间:2013-08-06 20:51:00

标签: d return-type parameterized-types

好的,似乎我的先前问题现在已经解决了(我把它留在下面作为参考)。然而,又一次出现 - 再次,似乎是我失踪的东西。在此代码中,我宣布了以下内容:

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编译器。

1 个答案:

答案 0 :(得分:4)

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

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

应该是

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

其余的看起来很好。