Initializing Arrays

Joseph Bell josephabell at tx.rr.com
Sun Jan 21 14:55:06 PST 2007



That does indeed work as expected.  The following also works:

celsius[3] temps = cast(celsius[3])[0, 20, 18];

and as I expect the following works okay as well:

int[3] ints = [1, 2, 3];

I find it curious though that

celsius[3] temps = [70,80,90]

compiles cleanly in the global namespace and not in the main function.

Any idea why?


Lionello Lunesu wrote:
> Not sure if it'll work, but try using [cast(celcius)0,20,18].
> Casting the first element will change the type of the array.

> 
> L.
> 
> "Joseph Bell" <josephabell at tx.rr.com> wrote in message 
> news:ep0h1h$18ph$1 at digitaldaemon.com...
>> Hi.
>>
>> I'm new to D but not new to programming.  I had a few questions regarding 
>> arrays and their initialization:
>>
>> // celsius.init will be 100, the boiling point of water
>> typedef float celsius = 100.00;
>>
>> If I declare an array of type celsius to group the low, average, and high 
>> temperature:
>>
>> celsius[3] temps;
>>
>> I'd like to be able to default the elements to something other than the 
>> value of celsius.init:  a syntax like
>>
>> celsius[3] temps = [0, 20, 18];
>>
>> In the global namespace (outside of main) the gdc compiler doesn't have 
>> any issues with this and gives me what I expect, temps[0] = 0.0, temps[1] 
>> = 20.0, and temps[2] = 18.0.  Within main however I get errors such as:
>>
>> arrayex.d:22: Error: cannot implicitly convert expression ([0,20,18]) of 
>> type int[3] to celsius.
>>
>> Is there a way to uniquely specify the default value of each element of an 
>> array in this manner in a non-global namespace?
>>
>> Many thanks for any insight.
>>
>> Joe 
> 
> 



More information about the Digitalmars-d mailing list