Error: functions cannot return static array float[4u][4u]

Spacen Jasset spacen at yahoo.co.uk
Thu Feb 21 16:08:08 PST 2008


Jason House wrote:
> Jason House wrote:
> 
>> Spacen Jasset wrote:
>>
>>> For this member function:
>>>
>>> float[4][4] toFloatArray4x4()
>>> {
>>> float f[4][4];
>>> return f;
>>> }
>> This looks like doing the following in C++:
>> C toC(){
>>   C c;
>>   return c;
>> }
>>
>> Which is an error (regardless of what the compiler says).  c is allocated
>> on
>> the heap and is deallocated when the function exits.  It may be that the
>> same effect is happening here.  I'm sure this kind of thing could get
>> fixed in a similar way to how full closures were fixed...
> 
> I don't know why I said heap instead of stack, but I should have said stack.
Hmm. That's legal in both C and C++ and works so long as 'C' isn't a 
pointer or array (otherwise you get a leak). I suppose then, that you 
could argue it's the same in D given that I was trying to return an array.

On the other hand I observe that D arrays do not decompose into pointers 
like the do in C and C++ and so I guess I was expecting that returning 
an array would be possible since its more or less a proper 'object' 
unlike in C or C++. Returning a static array could then work in exactly 
the same way as returning a struct in D since they are fixed size and 
static in nature.

Anyway, it seems it's not possible, and so I wonder what (in general) 
would be the way to go, return a float[][] object, or use a ( ref 
float[][] ) to pass the value back out, any suggestions?


More information about the Digitalmars-d-learn mailing list