Typedef of class doesn't work?
Charles D Hixson
charleshixsn at earthlink.net
Sat Feb 3 19:28:21 PST 2007
Bradley Smith wrote:
>
> import std.stdio;
>
> class A {
> this(float v) { value = v; }
> float getValue() { return value; }
>
> private:
> float value;
> }
>
> typedef A B;
>
> void main() {
> B b = new B(1);
> writefln(b.value);
> }
>
> The above code produces the following errors:
> >dmd testTypedef.d
> testTypedef.d(14): Error: cannot implicitly convert expression (new
> B(1F)) of type testTypedef.A to B
> testTypedef.d(15): Error: this for value needs to be type A not type B
>
> Aliasing works for classes, but not typedef. Why not?
>
> Thanks,
> Bradley
typedef seems broken in a much more general way than that.
(Seems, not is.) I don't have a small example but I defined
typedef uint NodeNbr;
typedef NodeNbr ObjAddr;
and then got:
charles at mandala1:~/projects/D/Parody$ dmd -c db.d
db.d(37): constructor node.Node.this (NodeFile,NodeNbr) does
not match parameter types (NodeFile,uint)
db.d(37): Error: cannot implicitly convert expression (n) of
type uint to NodeNbr
charles at mandala1:~/projects/D/Parody$ dmd -c db.d
db.d(37): constructor node.Node.this (NodeFile,NodeNbr) does
not match parameter types (NodeFile,NodeNbr)
db.d(37): Error: cannot implicitly convert expression (n) of
type NodeNbr to NodeNbr
charles at mandala1:~/projects/D/Parody$ dmd -c db.d
db.d(37): constructor node.Node.this (NodeFile,NodeNbr) does
not match parameter types (NodeFile,NodeNbr)
db.d(37): Error: cannot implicitly convert expression (nd) of
type NodeNbr to NodeNbr
(Each separate compilation represents a different way of
arranging things.)
FWIW, they were calling a class defined in another file, and I
got around this by using:
typedef node.NodeNbr ObjAddr;
This does make sense. But the error message is so totally
unhelpful that this almost doesn't seem worth the effort.
When I used alias instead of typedef it compiled without
error. That was the first step in figuring out what the
problem was. Better error messages are REALLY needed!
More information about the Digitalmars-d-learn
mailing list