| Thread overview | ||||||||
|---|---|---|---|---|---|---|---|---|
|
November 13, 2014 variable x cannot be read at compile time - how to get around this? | ||||
|---|---|---|---|---|
| ||||
Hello everyone! I need to create a two-dimensional array in this way, for example: auto x = 10; auto y = 10; auto some_array = new string[x][y]; variable x cannot be read at compile time I tried this: enum columns_array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; auto y = 10; int i = 1; auto some_array = new string[columns_array[i]][y]; Error: columns_array is used as a type And yet, if I have a function: string[x][] some_function (some par) { auto x = 10; auto y = 10; auto some_array = new string[x][y]; return some_array; } Thanks in advance. | ||||
November 13, 2014 Re: variable x cannot be read at compile time - how to get around this? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sergey | On Thursday, 13 November 2014 at 07:08:19 UTC, Sergey wrote:
> Hello everyone!
>
> I need to create a two-dimensional array in this way, for example:
What did you want the type of the array to be? "string[10][10]" or "string[][]"?
| |||
November 13, 2014 Re: variable x cannot be read at compile time - how to get around this? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Brian Schott | On Thursday, 13 November 2014 at 07:50:26 UTC, Brian Schott wrote:
> On Thursday, 13 November 2014 at 07:08:19 UTC, Sergey wrote:
>> Hello everyone!
>>
>> I need to create a two-dimensional array in this way, for example:
>
> What did you want the type of the array to be? "string[10][10]" or "string[][]"?
Oops, I did not see some of the details, how to work with string[][]. Right now I still try to understand. Sorry. Thanks for the push! :)
| |||
November 13, 2014 Re: variable x cannot be read at compile time - how to get around this? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sergey Attachments: | On Thu, 13 Nov 2014 07:08:17 +0000
Sergey via Digitalmars-d <digitalmars-d@puremagic.com> wrote:
> Hello everyone!
>
> I need to create a two-dimensional array in this way, for example:
>
> auto x = 10;
> auto y = 10;
> auto some_array = new string[x][y];
> variable x cannot be read at compile time
>
> I tried this:
> enum columns_array =
> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
> auto y = 10;
> int i = 1;
> auto some_array = new string[columns_array[i]][y];
> Error: columns_array is used as a type
>
> And yet, if I have a function:
> string[x][] some_function (some par) {
> auto x = 10;
> auto y = 10;
> auto some_array = new string[x][y];
> return some_array;
> }
>
> Thanks in advance.
you can't. use static constructor.
| |||
November 13, 2014 Re: variable x cannot be read at compile time - how to get around this? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Sergey | On 11/13/14 2:08 AM, Sergey wrote:
> Hello everyone!
>
> I need to create a two-dimensional array in this way, for example:
>
> auto x = 10;
> auto y = 10;
> auto some_array = new string[x][y];
auto some_array = new string[][](x, y);
Note, this creates 10 arrays of 10 elements all on the heap, and then a 10 element array to point at them.
If you wanted an array of 10 *fixed sized* arrays (which is what your code was trying to do), then you need to have the first dimension be a compile-time constant such as a literal or an enum/immutable.
-Steve
| |||
November 14, 2014 Re: variable x cannot be read at compile time - how to get around this? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Thursday, 13 November 2014 at 14:27:32 UTC, Steven Schveighoffer wrote:
> On 11/13/14 2:08 AM, Sergey wrote:
>> Hello everyone!
>>
>> I need to create a two-dimensional array in this way, for example:
>>
>> auto x = 10;
>> auto y = 10;
>> auto some_array = new string[x][y];
>
> auto some_array = new string[][](x, y);
>
> Note, this creates 10 arrays of 10 elements all on the heap, and then a 10 element array to point at them.
>
> If you wanted an array of 10 *fixed sized* arrays (which is what your code was trying to do), then you need to have the first dimension be a compile-time constant such as a literal or an enum/immutable.
>
> -Steve
Thanks!!!
This is what I need!
auto some_array = new string[][](x, y);
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply