我在D中編寫了一個基本的Node
結構體,它被設計用作樹狀結構的一部分。代碼如下:使用struct構造函數的怪異行爲
import std.algorithm: min;
alias Number = size_t;
struct Node {
private {
Node* left, right, parent;
Number val;
}
this(Number n) {val = n;}
this(ref Node u, ref Node v) {
this.left = &u;
this.right = &v;
val = min(u.val, v.val);
u.parent = &this;
v.parent = &this;
}
}
現在,我寫這應該給我一個Node
(指一整棵樹)與參數數組提供的葉子,如下一個簡單的函數。
alias Number = size_t;
Node make_tree (Number[] nums) {
if (nums.length == 1) {
return Node(nums[0]);
} else {
Number half = nums.length/2;
return Node(make_tree(nums[0..half]), make_tree(nums[half..$]));
}
}
現在,當我試圖通過DMD運行它,我得到以下錯誤信息:
Error: constructor Node.this (ulong n) is not callable using argument types (Node, Node)
這是沒有意義的,我 - 爲什麼它試圖調用單參數構造函數時給出兩個參數?
問題在於ref,你不能從臨時的IIRC中接受ref –
如果問題確實是ref,你可以用'this()(自動引用節點u,auto ref Node v )'爲它工作。 注意使用'auto ref'來啓用傳遞臨時函數,但爲了這個功能,函數必須是一個模板。這就是爲什麼添加第一組括號。 – yaz