www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Accessing members of an array of a class with map.

reply Ave <learner dquestion.com> writes:
An example of what I'm trying to do:

import std.stdio;
import std.container;
import std.algorithm;
class Aa
{
     Array!B arrB;
}

class Bb
{
     string name;

}
void main()
{
     Aa test;
     auto c=new Bb;
     c.name="asdf";
     test.arrB.insert(c);
     auto d=new Bb;
     d.name="1234";
     test.arrB.insert(d);
     writeln(test.arrB[].map!(x=>x.name);
}
I was able to get this to compile,but it segfaults.
If I do this however:

import std.stdio;
import std.container;
import std.algorithm;
class Bb
{
     string name;
}
void main()
{
     Array!B arrB;
     auto c=new Bb;
     c.name="asdf";
     arrB.insert(c);
     auto d=new Bb;
     d.name="1234";
     arrB.insert(d);
     writeln(arrB[].map!(x=>x.name);
}
It will compile and work without seg faulting. What am I doing 
wrong in my first case that's causing the program to seg fault?
Sep 30 2016
parent reply Jonathan M Davis via Digitalmars-d-learn writes:
On Friday, September 30, 2016 19:04:11 Ave via Digitalmars-d-learn wrote:
 An example of what I'm trying to do:

 import std.stdio;
 import std.container;
 import std.algorithm;
 class Aa
 {
      Array!B arrB;
 }

 class Bb
 {
      string name;

 }
 void main()
 {
      Aa test;
      auto c=new Bb;
      c.name="asdf";
      test.arrB.insert(c);
      auto d=new Bb;
      d.name="1234";
      test.arrB.insert(d);
      writeln(test.arrB[].map!(x=>x.name);
 }
 I was able to get this to compile,but it segfaults.
 If I do this however:

 import std.stdio;
 import std.container;
 import std.algorithm;
 class Bb
 {
      string name;
 }
 void main()
 {
      Array!B arrB;
      auto c=new Bb;
      c.name="asdf";
      arrB.insert(c);
      auto d=new Bb;
      d.name="1234";
      arrB.insert(d);
      writeln(arrB[].map!(x=>x.name);
 }
 It will compile and work without seg faulting. What am I doing
 wrong in my first case that's causing the program to seg fault?
The first example is segfaulting, because you never gave the variable, test, a value. It's null when you try and access its arrB member. - Jonathan M Davis
Sep 30 2016
parent Ave <learning duh.com> writes:
On Friday, 30 September 2016 at 19:31:55 UTC, Jonathan M Davis 
wrote:
 On Friday, September 30, 2016 19:04:11 Ave via 
 Digitalmars-d-learn wrote:
 [...]
The first example is segfaulting, because you never gave the variable, test, a value. It's null when you try and access its arrB member. - Jonathan M Davis
Hah wow. Can't believe I even retyped that whole thing and didn't see it. Thanks.
Sep 30 2016