我似乎无法做出这方面的一个小例子,但也许有人会遇到它。
我有一个类Path
,方法void find()
,当我尝试在方法中实例化一个类型为int[string]
的关联数组时,我得到的链接器错误看起来像这样:
/tmp/ccTF0A0c.o: In function `_D6object28__T16AssociativeArrayTAyaTiZ16AssociativeArray6rehashMFNdZHAyai':
game.d:(.text._D6object28__T16AssociativeArrayTAyaTiZ16AssociativeArray6rehashMFNdZHAyai[_D6object28__T16AssociativeArrayTAyaTiZ16AssociativeArray6rehashMFNdZHAyai]+0x44): undefined reference to `_D14TypeInfo_HAyai6__initZ'
collect2: ld returned 1 exit status
如果我将关联数组粘贴在类的成员中,一切看起来都很好。
代码看起来像这样:
class Path
{
int[string] bar; // Here it works.
void find()
{
int[string] foo; // Here it fails.
}
}
答案 0 :(得分:2)
我自己遇到了一个非常类似的问题,一个类存储了一个对象值和字符串键的关联数组。即使上面的问题中的这个例子实际上是 编译(Line:3 int [string] bar; //这里有效。)对我来说它没有,我的编译将失败并显示以下消息:
/tmp/cc8XXyP6.o: In function `_D6object64__T16AssociativeArrayTAyaTC2px5pizza8graphics8textures8MaterialZ16AssociativeArray6rehashMFNdZHAyaC2px5pizza8graphics8textures8Material':
/usr/include/d2/4.6/object.di:366: undefined reference to `_D50TypeInfo_HAyaC2px5pizza8graphics8textures8Material6__initZ'
collect2: ld returned 1 exit status
原来我只是通过在类的构造函数中使用包含单个键/值对的AA文字[key:value]初始化数组来解决它,并且它工作正常。
示例:(不编译)
class Cache {
Material[string] dict;
...
Material load(string filename) {
... (File I/O and such)
dict[filename] = loadedMaterial; //Compiler Error?
}
}
示例:( DOES Compile)
class Cache {
Material[string] dict;
...
this() {
dict = ["notexture" : new Material()]; //Somehow makes all the difference
}
...
Material load(string filename) {
... (File I/O and such)
dict[filename] = loadedMaterial; //Works fine
}
}
我认为这个问题并不完全相同,但是对于那些绊倒相同错误消息的人来说可能仍然有用,这是我在谷歌搜索一小时后发现的第一个有意义的问题。
答案 1 :(得分:-1)
你在做增量编译吗? D编译器不支持这一点。 [意见:由于这个问题,D语言永远不会成为主流]