OK、以前の問題は解決されたようです (参照用に以下に残しました)。ただし、さらに別のものが発生します。これも、私が見逃しているようです。このコードのさらに上で、次のように宣言しました。
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 コンパイラを使用しています。