1

我似乎无法举一个小例子,但也许以前有人遇到过。

我有一个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.
    }
}
4

2 回答 2

2

我自己也遇到了一个非常相似的问题,即存储对象值和字符串键的关联数组的类。即使上面问题中的这个例子确实编译了 (Line:3 int[string] bar; // Here it works.) 对我来说它没有,我的编译会失败并显示以下消息:

/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?
    }
}

示例:(执行编译)

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
    }
}

我认为不是完全相同的问题,但对于遇到相同错误消息的人可能仍然有用,这是我在谷歌搜索一个小时后发现的第一个有意义的问题。

于 2013-11-22T06:41:32.167 回答
-1

你在做增量编译吗?D 编译器不支持这一点。[观点:D语言永远不会因为这个问题而成为主流]

于 2012-05-01T20:07:51.953 回答