请教 这个是不是dmd或者gdc的bug呢?

tomqyp 2007-10-10
//file1 testA.d
module testa;
import testb;

enum TestEnum {
	A,
}

class CCC{
	int a;
}

struct SSS{
	int a;
}


//file2 testB.d
module testb;
import testa;

TestEnum te;
CCC ccc;
SSS sss;

问题在于同样是相互引用类和结构都允许,枚举却不行,报如下错误
enum TestEnum is forward referenced

出现这个问题具体分为这几种情况:
1.分别单独编译上面两个文件时,file1 testA.d不论是dmd还是gdc都不法通过
   dmd testA.d -c
2.同时编译两个文件testA.d在前testB.d在后,不论是dmd还是gdc都无法通过
   dmd testA.d testB.d -c
3.同时编译两个文件testB.d在前testA.d在后,dmd通过,gdc还是不能通过
   dmd testB.d testA.d -c

特别是第3种情况,不同的编译器产生不同的结果,估计至少其中一个可能有问题,不过不知道是什么原因
oldrev 2007-10-10
enum 的向前引用问题,似乎最近的 dmd 解决了这个问题,check 一下 DMD 的 changelog
tomqyp 2007-10-10
在D 1.022的change log中找到了你说的这个bug,看了一下好像是enum的一个前向引用引起dmd崩溃,我用1.022和2.005都试了一下,前向引用的问题依然存在。
Colorful 2007-10-10
这个问题如果有良好的代码组织以及OOP完全可以避免问题发生。

还是尽量少用全局变量比较好!
tomqyp 2007-10-10
上面代码是举个例子,实际上在相互引用的情况下,enum在类的属性或者函数的参数中时也会发生这种情况。
Colorful 2007-10-10
这还真是个问题。
如果没有模块间的互相import,程序可以编译通过。

但是好像会有几个模块间互相引用的情况出现。

还是得好好组织代码,呵呵。
Colorful 2007-10-10
不知道这算是Bug还是Feature?
Global site tag (gtag.js) - Google Analytics