我在Ubuntu 13.04 64位上使用DMD64 D Compiler v2.063.2。在沒有writeln的情況下找不到構造函數
我已經寫了如下一類:
class FixedList(T){
// list
private T[] list;
// number of items
private size_t numberOfItems;
// capacity
private size_t capacity;
// mutex
private Mutex listMutex;
// get capacity
@property public size_t Capacity(){ return capacity; }
@property public shared size_t Capacity(){ return capacity; }
// constructor
public this(size_t capacity){
// initialise
numberOfItems = 0;
this.capacity = capacity;
writeln("Cons Normal");
}
// constructor
public shared this(size_t capacity){
// initialise
numberOfItems = 0;
this.capacity = capacity;
// create mutex
listMutex = cast(shared)(new Mutex());
writeln("Cons Shared");
}
}
雖然類是這樣寫的,在主函數中,我寫的代碼:
auto list1 = new shared FixedList!int(128);
auto list2 = new FixedList!int(128);
輸出與此,沒有錯誤在所有和輸出如下:
Cons Shared
Cons Normal
我要做接下來就是刪除這兩個writeln
行從代碼,並且當我重新編譯代碼,它開始示出作爲以下的錯誤消息:
src/webapp.d(61): Error: constructor lists.FixedList!(int).FixedList.this called with argument types:
((int) shared)
matches both:
lists.d(28): lists.FixedList!(int).FixedList.this(ulong capacity)
and:
lists.d(37): lists.FixedList!(int).FixedList.this(ulong capacity)
src/app.d(61): Error: no constructor for FixedList
src/app.d(62): Error: constructor lists.FixedList!(int).FixedList.this called with argument types:
((int))
matches both:
lists.d(28): lists.FixedList!(int).FixedList.this(ulong capacity)
and:
lists.d(37): lists.FixedList!(int).FixedList.this(ulong capacity)
src/app.d(62): Error: no constructor for FixedList
make: *** [all] Error 1
基本上writeln
功能是防止該錯誤。其實writeln
是在許多地方阻止,我不知道爲什麼會發生這種情況。
我甚至試圖與m32
標誌編譯的代碼爲32位,但它仍然是一樣的。我做錯了什麼,或者這是一個錯誤?
u能提什麼是錯的代碼..? – NREZ
嗯。我想當e嘗試創建一個共享對象,特別是共享構造函數被選中。我在文檔中閱讀了「純函數」,但沒有發現任何關於它的內容。 – tcak
@ user2587136純度不推斷構造。據推斷爲模板的功能,整個類是模板化,所以構造函數模板。 –