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