Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arrays in Types
#1
Is this not possible? I've had a few small projects that tried and failed at this. What's goin' on?
quote="Deleter"]judging gameplay, you can adaquately compare quake 4 with pong[/quote]
Reply
#2
I recently posted an example in freebasic.net

here is what I am guessing you want to do
Code:
Type mytype
variable(30) as integer
. . .
End Type
which you cannot do, however you can do it like this:
Code:
Type mytype
variable as integer
. . .
End Type

Dim array(1 to 30) as mytype
which will give you an array containing all of the variables in the type declaration as in array(1).variable or array(2).variable and so on
url=http://www.smithcosoft.com]SmithcoSoft Creations[/url]
"If you make it idiot proof, someone will make a better idiot" - Murphy's Law
Reply
#3
Im not sure what you mean but it does work making an array inside a type.

Code:
Type mytype_t
    variable(30) As Integer
End Type

Dim myinst As mytype_t

myinst.variable(5) = 1337
Print myinst.variable(5)
Sleep
It's the difference between asking someone how much flour goes into pancakes, and handing them a sorry mix of oozing green goo and asking them to fix it." - Deleter

-Founder & President of the No More Religion Threads movement-
Reply
#4
yes, dynamic arrays are what everyone wants

you use pointers like so

Code:
Type business

  owners As Integer
  owner_name As String Ptr
  
End Type

Declare Function alloc_owner_name( num As Integer = 0, s As String Ptr = 0 )


Dim As business b( 1 )

'' init
b( 0 ).owners = 1
b( 1 ).owners = 3


'' set up
With b( 0 )

  .owner_name = alloc_owner_name( .owners )
  
End With
With b( 1 )

  .owner_name = alloc_owner_name( .owners )
  
End With


'' 1 owner
b(0).owner_name[0] = "Bill Gates"

'' 3 owner
b(1).owner_name[0] = "Completely"
b(1).owner_name[1] = "Random"
b(1).owner_name[2] = "People"


For c = 0 To 1
  ? "business " & c + 1
  ?
  With b( c )
  
  For ct = 0 To .owners - 1
    ? "owner #" & ct + 1
    ? .owner_name[ct]
    .owner_name[ct] = "" ''clean!!

  Next
  
  ?
  
  
  End With

Next

Sleep

b( 0 ).owner_name = alloc_owner_name( 0 ) ''give it nothing!
b( 1 ).owner_name = alloc_owner_name



Function alloc_owner_name( num As Integer = 0, s As String Ptr = 0 )

  Deallocate s

  Return CAllocate( Len( String ) * num )
  
End Function

always clean up when you make a mess
Reply
#5
Quote:which you cannot do,

Um..you can? TBK's example works for me on 0.15.
Reply
#6
Ok, in my program, I have a type that has an array inside it.

Code:
Type SomeType
array(1 To 12) As Byte
End Type

Then I have an array of SomeTypes.

Code:
Dim Shared SomeArray(1 To 10) As SomeType

But it doesn't appear to work.
quote="Deleter"]judging gameplay, you can adaquately compare quake 4 with pong[/quote]
Reply
#7
It appears to work for me. :wink:
Reply
#8
This works fine for me in 0.15

Code:
Type SomeType
array(1 To 12) As Byte
End Type

Dim Shared SomeArray(1 To 10) As SomeType

SomeArray(1).Array(1) = 50
SomeArray(10).Array(11) = 100
Print SomeArray(1).Array(1)
Print SomeArray(10).Array(11)
Sleep
EVEN MEN OF STEEL RUST.
[Image: chav.gif]
Reply
#9
hmmm, well I know you couldn't do it in QB, but I am too lazy to bust out my laptop to test it right now so I guess i'll take your word for it...
url=http://www.smithcosoft.com]SmithcoSoft Creations[/url]
"If you make it idiot proof, someone will make a better idiot" - Murphy's Law
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)