Struct "inheritance"

Vidar Wahlberg canidae at exent.net
Sat Feb 4 06:04:50 PST 2012


On 2012-02-04 14:45, Simen Kjærås wrote:
> Like bearophile said, Point(x, y) should work - assuming you have
> defined no other constructors for Point.

You are correct, my apologies for not testing more thoroughly.
Let me try again, explaining the real issue:
I have 3 files:
-- Bar.d --
import Foo;
import Struct;
class Bar {
   Foo _foo;
   this() {
     _foo = new Foo(Struct(1));
   }
}
void main() {
   new Bar();
}

-- Foo.d --
import Struct;
class Foo {
   Struct _s;
   this(Struct s) {
     _s = s;
   }
}

-- Struct.d --
struct Struct {
   int baz;
}

This code does not compile:
Bar.d:6: Error: function expected before (), not module Struct of type void
Bar.d:6: Error: constructor Foo.Foo.this (Struct s) is not callable 
using argument types (_error_)

Why is that?


> It is. The problem is that bool opEquals(ref const Point) expects a Point
> by reference, and the return value from your property is a temporary, from
> which we can get no reference. The solution is to remove the ref:
> bool opEquals(const Point). The only reason to use ref here is to cut down
> on copying, and might be worthwhile on larger structures.

I've tried removing the "ref", but I get other errors in return then:
Point.d:19: Error: function Point.Point.opEquals type signature should 
be const bool(ref const(Point)) not const bool(const const(Point) p)
Coordinate.d:20: Error: function Coordinate.Coordinate.opEquals type 
signature should be const bool(ref const(Coordinate)) not const 
bool(const const(Coordinate) c)


More information about the Digitalmars-d-learn mailing list