Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Box2d - Variable length array of non-POD element type 'b2Vec2'

I'm working on a importer for a game of mine, it reads an xml and then creates the box2d bodies for everything.

For example

  <polygon vertexCount="3" density="0" friction="0.25" restitution="0.30000000000000004">
      <vertice x="6.506500000000001" y="0.4345"/>
      <vertice x="6.534970527648927" y="0.48385302734375"/>
      <vertice x="6.478029472351075" y="0.48385302734375"/>
  </polygon>

The problem is in the exporter I'm now facing the polygon part, I need to setup a b2vec2 array before adding the vertices and setting their positions.

int count = [[childnode attributeForName:@"vertexCount"] intValue];
b2Vec2 points[count];

but box2d wants the points[5] to be an actual literal number (like points[5] instead of a variable points[number], the error it outputs when I have the variable count in there is:

 Variable length array of non-POD element type 'b2Vec2'

How do I solve this? I tried making it a constant but that doesn't work either (and doesn't help me since I need it to be dynamic).

like image 946
M0rph3v5 Avatar asked Jul 26 '11 11:07

M0rph3v5


1 Answers

You have to create the array on a heap:

b2Vec2 *array = new b2Vec2[count];

Don't forget to delete the array manually when finished.

or better use std::vector:

a)
std::vector<b2Vec2> vertices(count);
vertices[0].set(2, 3);
vertices[1].set(3, 4);
...

b)
std::vector<b2Vec2> vertices;
vertices.push_back(b2Vec2(2, 3));
vertices.push_back(b2Vec2(3, 4));
like image 174
Andrew Avatar answered Oct 11 '22 12:10

Andrew