FIle I/O

Jonathan M Davis jmdavisProg at gmx.com
Fri Sep 17 10:24:51 PDT 2010


On Friday, September 17, 2010 09:21:07 Graham Nicholls wrote:
> I'm getting a little confused.  I've installed a .deb package of d 2.0, but
> now my code won't compile:
> unlogcat.d(112): Error: std.stream.File at
> /usr/include/d/dmd/phobos/std/stream.d(1787) conflicts with std.stdio.File
> at /usr/include/d/dmd/phobos/std/stdio.d(248)
> 
> Yet if I leave either out, I get unresolved symbols.  Also, where can I
> find out what exceptions can be raised for a particular operation ?
> Thanks

If you import two modules which have the same symbol in them (be it a function, 
a struct, or whatnot) and you use that symbol in your code without fully 
qualifying it, and it's ambiguous as to which one you meant, the compiler won't 
compile it. You have to fully qualify it. From the looks of it, you have 
imported both std.stream (which is going to be deprecated by the way) and 
std.stdio. std.stream has a File class and std.stdio has a File struct. So, if 
you use File in your module, then it's ambiguous as to which you mean. To avoid 
the problem you either have to a named import (or whatever it's called) - e.g. 
import io = std.stdio - and use that name to qualify anything you use in that 
module (e.g. io.File), or you have to fully qualify the name (std.stdio.File). 
You might be able to specifically import a symbol from a module, but I don't 
remember how.

In any case, your problem is that you've imported two modules with the same 
symbol in them, and you've tried to use that symbol, so the compiler doesn't 
know which one you mean, and you have to be more specific so that it knows which 
you mean.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list