Steve,

It's not exactly prose, but the error message is correct.  It says:

"Error: new can only create structs, dynamic arrays or class objects, not char[]'s."

So:

1. You didn't try to allocate space for a struct (e.g. new struct_t.)
2. You didn't try to allocate space for a dynamic array (new char[5].)
3. You didn't try to allocate space for a class object (new Class.)

From your code, it's obvious what you were meaning to do, so I would agree that changing this would be good. Options I see are:

1. Improve the error message, e.g.: "Error: new can only create structs, sized dynamic arrays, or class objects; char[] cannot be created."

2. Change the compiler to react as if you used new char[0].

3. Special case the error message, e.g.: "Error: new can only create dynamic arrays with an initial length, use 0 for empty."

-[Unknown]


Steve Teale wrote:
bearophile Wrote:

Steve Teale:
What am I missing here, isn't char[] a dynamic array?
I suggest you to post such questions to the "learn" newsgroup.

D dynamic arrays aren't objects, they are C-like structs that contain a just length and a 
pointer (no capacity). The "new" for them is needed only to allocate the memory 
they point to. So to define an empty dynamic array of chars:

char[] ca;
In D1 you can also just:
string s1;

To allocate a non empty array of chars of specified len:
auto ca = new char[some_len];

Tale a look at the D docs, where such things are explained.

Bye,
bearophile

So how do you interpret the error message?


Reply via email to