On Sunday, 21 August 2016 at 23:28:14 UTC, brian wrote:
/* creates(?) an empty array of structs */ testStruct[int] testStructArray;
That's not actually an array per se, that is a key/value map where the keys are ints.
So you can set values to it at any position in it but not append or do other traditional array operations.
An ordinary array is defined with testStruct[] testStructArray; though what you have isn't necessarily wrong.
auto newStruct = new testStruct;
This is the cause of the pointer mismatch error - new struct returns a pointer to it. If you just want an ordinary struct you define it:
testStruct newStruct; like that.
newStruct.aa = a.dup; newStruct.bb = b.dup;
No need for the .dup there because strings aren't going to be changing under you anyway.
1) I'm assuming by the error that line 23 defines a pointer rather than a ... not-pointer thing. I'm not sure why it is doing that, and would like some explanation please. :)
It is just how new works in D, it returns a reference. For structs, that means a pointer to it.
2) Is this the best way to do what I am trying to do, which is dynamically grow an array of user defined structs?
Either do a traditional array and copy struct values onto it or do an array of pointers and new them. Which option is bsed depends on the details of what you're doing.