On 03/06/2014 11:31 AM, captain_fid wrote:
On Thursday, 6 March 2014 at 19:19:29 UTC, captain_fid wrote:
Sorry for the very basic question. Much still alludes me with this
language. I appreciate the forum.

struct S
{

Wow sorry for that. I'm a moron... don't press <tab> <enter>...

struct S
{
   int a;
   string b;
}

class A
{
   S[]* pointer_to_list;
   abstract...
}

class B: A
{
   S[] items = [ {10, "first"}, {20, "second"}];

   this() {
    pointer_to_list = &items;
   }
}

My problem is in de-referencing later (seg fault). Is this even the best
way?

I Really need to access the array in a derived class. 'S' (I believe)
really is best as a Structure.

Any suggestions. Thanks in advance (and sorry for the rough start).



You need to dereference the pointer by * and you would be using a slice:

import std.stdio;
import std.conv;

struct S
{
    int a;
    string b;
}

class A
{
    S[]* pointer_to_list;

    void access()
    {
        foreach (e; *pointer_to_list) {    // <-- NOTE *
            writeln(e);
        }
    }
}

class B: A
{
    S[] items = [ {10, "first"}, {20, "second"}];

    this() {
        pointer_to_list = &items;
    }
}

void main()
{
    auto b = new B();

    foreach (i; 30 .. 40) {
        b.items ~= S(i, i.to!string);
    }

    b.access();
}

As a side note, I would make A take the slice as a reference parameter, rather that B accessing A's member directly. It is better for maintainability:

class A
{
    S[]* pointer_to_list;

    this(ref S[] list)    // <-- BETTER
    {
        this.pointer_to_list = &list;
    }

// ...
}

class B: A
{
// ...

    this() {
        super(items);    // <-- BETTER
    }
}

Ali

Reply via email to