2013-11-23 39 views
1

當鏈接我的代碼,我得到以下錯誤:鏈接器錯誤;不能鏈接:_D16TypeInfo_HAyayAa6__initZ

../Build/main.o:(.data._D16TypeInfo_yHAyaAa6__initZ+0x10): undefined reference to `_D16TypeInfo_HAyayAa6__initZ'

我不知道在哪裏錯誤的現象發生,所以沒有太多的代碼,聰明的我可以爲您提供。有很多的代碼。

+0

什麼是編譯器,什麼是環境? – DejanLekic

+0

@DejanLekic Linux 64位 –

+0

_D16TypeInfo_HAyayAa6__initZ不能被刪除,所以如果沒有代碼,幾乎不可能猜到發生了什麼。將它粘貼到DPaste上,然後給我們鏈接... – DejanLekic

回答

2

嘗試將此代碼添加到您的文件與主():

void aaHack() { 
    import std.stdio; 
    writeln(typeid(immutable(char[])[string])); 
} 

和重新編譯,看看它是否工作。我相信你的錯誤是由於難以複製的關聯數組中的舊bug造成的;它似乎隨機出現,難以修復。所需的確切類型是我不確定的,我猜根據眼球的情況,但我認爲就是這樣。

無論如何,D中的關聯數組實現現在停留在兩個想法之間的中間點:通過特殊的運行時調用在語言中實現,並在庫中實現,除了語法糖之外,沒有編譯器支持。再次,我不是當然這是原因,但它是圍繞這些變化進行的,所以我認爲就是這樣。我相信發生的是你引用AA類型,然後通過半完成庫類型使用AA類型,但是這些函數需要編譯器魔術調用的類型信息,並且它永遠不會正確插入。或者其他的東西。

但是黑客的解決方法是手動強行提及typeid來填補空白。我的cgi.d有14行代碼一遍又一遍地處理這個事情:完全不可變的鍵和/或值似乎是破壞它的邊緣情況,而tail-immutable數組(例如字符串)工作正常。也許編譯器會假設其他的東西會被剝離,而不是,idk,但是黑客對我來說工作起來相當不錯。

+1

我實際上並沒有使用任何奇怪的關聯數組,只是'不可變串[string]',但它仍然有效。謝謝! –