More TYPE nonsense

Blitz3D Forums/Blitz3D Beginners Area/More TYPE nonsense

WildW(Posted 2004) [#1]
I've been through the tutorials for using TYPEs, I just wanted to check something.

Say I create a type:

TYPE thing
field x
field y
End Type


And then I want to create a number of them, I can loop:

For i = 1 to 5
group.thing = New thing
Next


And if I want to access them, I have to loop through them:

For group.thing = each thing
group\x = group\x + 1
Next


What I don't seem to be able to do is create an array of "thing" and access each one directly. In C I would just:

struct MYTHING
{
float x;
float y;

} thing[100];

And access each one directly. . .

thing[36].x = 4.0; etc


Is this not possible with types in BlitzPlus?


Stevie G(Posted 2004) [#2]
Dim group.thing( 100 )

group( 0 )\x = 10
group( 2 )\y = 15


WildW(Posted 2004) [#3]
Thanks. . . I was sure I'd tried that and failed. Need more caffine :)


sswift(Posted 2004) [#4]
I think this works as well:

type blah
field a
end type

type blah2
field b.blah[10]
end type

Btw, square parentheses are neccessary for arrays in types, and said arrays can only be one dimensional, but that doesn't stop you from indexing them like so: y*10 + x


WildW(Posted 2004) [#5]
On second thoughts, this isn't working:

Type thing
Field x
End Type

Dim group.thing(100)

group(1)\x = 4


This just gives me an error. . .

"Object does not exist"
(Debugger pointing to the group(1)\x = 4 line)

Do they have to be initialised in some way maybe?


WildW(Posted 2004) [#6]
sswift's method is working, that'll do for me :) Thanks guys


Tiger(Posted 2004) [#7]
You need to create it with new first:

Type thing 
Field x 
End Type 

Dim group.thing(100) 

group.thing(1)=New thing
group(1)\x = 4 


Bye..


dmaz(Posted 2004) [#8]
As Tiger pointed to...

Dim group.thing(100) just creates an array that CAN store the pointers to 100 things. The memory for each thing still needs to be allocated with New.


Stevie G(Posted 2004) [#9]
Yeah, sorry forgot that bit - just assumed you'd know.


sswift(Posted 2004) [#10]
"sswift's method is working, that'll do for me :) Thanks guys"

Without using NEW? That migth be a bug... The array is just supposed to be pointers to types, not create new types itself.


WildW(Posted 2004) [#11]
No, I did use New. I am new at this, I've done nothing but code C for the past year so it's hard to shake off bad habbits. To be honest so much code has passed I can hardly remember what I tried for the other method now. In any case, all's fine.


PowerPC603(Posted 2004) [#12]
Type thing
Field x
End Type

Dim group.thing(100)

; Create the instances and fill the array with the pointers to those instances
For i = 0 to 100
group(i) = New thing
Next

group(1)\x = 4