Iteratable single linked list of floats.

drug drug2004 at bk.ru
Wed Apr 21 13:29:05 UTC 2021


21.04.2021 16:19, Alain De Vos пишет:
> import std.stdio;
> void main(){
>      struct List {
>          struct Node {
>              float f;
>              Node *next;
>              }
>          Node * root=null;
>          bool empty() const {return !root;}
>          void popFront() {root=root.next;}
>          float front() const {return root.f;}
>          void push(float f) {
>                  Node * newnode=new Node();
>                  newnode.f=f;
>                  root.next=newnode; // Segmentation fault
>                  }
>      }
>      List * l=new List();
>      l.push(3);
>      foreach(element;l){ // Invalid foreach aggregate
>        writeln(element.root.f);
>      }
> }

```D
import std.stdio;
void main(){
     struct List {
         struct Node {
             float f;
             Node *next;
             }
         Node * root=null;
         bool empty() const {return !root;}
         void popFront() {root=root.next;}
         float front() const {return root.f;}
         void push(float f) {
                 Node * newnode=new Node();
                 newnode.f=f;
             	if (root) // by default root is null so you need to 
initialize it first time
                 	root.next=newnode;
             	else
                     root = newnode;
                 }
     }
     List * l=new List();
     l.push(3);
     foreach(element; *l){ // Invalid foreach aggregate because `l` is a 
pointer to List, so you need to dereference the pointer
       writeln(element);
     }
}
```

1) you need to initialize the root
2) pointer to range is not valid foreach aggregate


More information about the Digitalmars-d-learn mailing list