我在D中編寫了一個trie,我希望每個trie對象都有一個指向某些數據的指針,如果該節點是trie中的終端節點,則該數據具有非NULL值,否則爲NULL。數據的類型在創建trie之前是不確定的(在C中,這將通過void *
完成,但我打算使用模板來完成),這是爲什麼指向堆對象是理想的原因之一。如何在D堆中創建一個字符串?
這需要我最終在堆上創建我的數據,在此點可以指向trie節點。試驗中,似乎new
執行此任務,就像它在C++中一樣。但是由於某些原因,這會導致字符串失敗。下面的代碼工作:
import std.stdio;
void main() {
string *a;
string b = "hello";
a = &b;
writefln("b = %s, a = %s, *a = %s", b, a, *a);
}
/* OUTPUT:
b = hello, a = 7FFF5C60D8B0, *a = hello
*/
然而,這種失敗:
import std.stdio;
void main() {
string *a;
a = new string();
writefln("a = %s, *a = %s", a, *a);
}
/* COMPILER FAILS WITH:
test.d(5): Error: new can only create structs, dynamic arrays or class objects, not string's
*/
是怎麼回事?我如何在堆上創建字符串?
P.S.如果有人編寫D編譯器正在讀取這個,那麼「string's」中的撇號是一個語法錯誤。
「PS如果有人寫d編譯器讀這篇文章, 「字符串」中的撇號是一個語法錯誤。「不,這是故意的。如果需要,應該使用原始字符串。 auto mystring = \'string's \'; – 0b1100110 2013-02-22 23:22:06