On Wednesday, 4 April 2018 at 10:11:37 UTC, Timoses wrote:
Example:
```
class A
{
immutable int i;
this(){}
}
class B : A
{
this()
{
this.i = 3;
}
}
void main()
{
auto b = new B;
}
```
throws:
Error: constructor `onlineapp.A.this` missing initializer for
immutable field i
Error: cannot modify immutable expression this.i
Why can't I initialize the immutable member in the derived
class?
Because by the time B's constructor is called, A might already
have initialized it, and rely on it never changing. The solution
is to add a constructor overload to A, and call that from B:
class A
{
immutable int i;
protected this(int i) {
this.i = i;
}
}
class B : A
{
this()
{
super(3);
}
}
unittest
{
auto b = new B;
}
--
Simen