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