Qbasicnews.com

Full Version: Arrays in Types
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Is this not possible? I've had a few small projects that tried and failed at this. What's goin' on?
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
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

Anonymous

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
Quote:which you cannot do,

Um..you can? TBK's example works for me on 0.15.
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.
It appears to work for me. :wink:
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
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...