On Sunday 15 August 2010 19:20:12 Seth Hoenig wrote:
> What I really want is something like this:
> 
> auto s = args[1];
> auto t = args[2];
> auto d = new int[s.length][t.length];
> 
> but the compiler complains with the error: Error: Integer constant
> expression expected instead of s.length
> 
> So then I try to fudge it with something like:
> 
> auto d = new int[][t.length];
> d.length = s.length;
> 
> But then accessing elements of d throws an exception:
> core.exception.rangeer...@lev(7): Range violation
> 
> Soo.. how am I supposed to make a matrix when I don't know the dimensions
> at compile time?

I generally declare dynamically allocated arrays like so:

auto arr = args[](thesize);
auto multiArr = args[][](thesize, theothersize);


So, in your case, you'd use:

auto s = args[1];
auto t  args[2];
auto d = new int[][](s.length, t.length);


IIRC, the problem with putting the numbers in the brackets is that it starts 
trying to do stuff like declare dynamic arrays of static arrays or somesuch. I 
gave up on putting the sizes in the brackets with dynamic arrays ages ago, so I 
don't remember the exact details. It just seems simpler to put it in the parens 
and not worry about it, as silly as it seems. You still access them normally 
with the indices in the brackets, but there are definitely issues with 
declaring 
dynamic arrays and putting the length of the arrays in the brackets.

- Jonathan M Davis

Reply via email to