请教 这个是不是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?
|