www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Initializing multidimentional Array with a struct

reply "Chris Pons" <cmpons gmail.com> writes:
I'm trying to figure out how to initialize a multi-dimentional 
array with a struct. I thought it would be straight forward, but 
i'm running into problems. I'm using nested for loops, and just 
setting the current index to a blank version of my struct but 
that gives me this error: "Error: no [] operator overload for 
type Node". I didn't know I needed to overload that operator, 
usually didn't need to in C++ as far as I remember.

struct Node
{
     bool walkable;		
     vect2 position;		
     int	xIndex, yIndex;
     Node*[4] connections;
}

void InitializePathGraph()
{
     for( int x = 0; x < mapWidth; x++ )
     {
	for( int y = 0; y < mapHeight; y++ )
	{
	    Node node;
	    PathGraph[x][y] = node;// ERROR
	}
     }
}
Mar 31 2012
next sibling parent "Chris Pons" <cmpons gmail.com> writes:
I also tried this, which gives an out of range error:

	void InitializePathGraph()
	{
		PathGraph.length = mapWidth;
		foreach( elem; PathGraph )
		{
			elem.length = mapHeight;
		}
		
		Node node;

		for( int x = 0; x < mapWidth - 1; x++ )
		{
			for( int y = 0; y < mapHeight - 1; y++ )
			{
				
				PathGraph[x][y] = node;
			}
		}
	}

This is really confusing me.
Mar 31 2012
prev sibling next sibling parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
On 03/31/2012 02:34 PM, Chris Pons wrote:
 I'm trying to figure out how to initialize a multi-dimentional array
 with a struct. I thought it would be straight forward, but i'm running
 into problems. I'm using nested for loops, and just setting the current
 index to a blank version of my struct but that gives me this error:
 "Error: no [] operator overload for type Node". I didn't know I needed
 to overload that operator, usually didn't need to in C++ as far as I
 remember.

 struct Node
 {
 bool walkable;
 vect2 position;
 int xIndex, yIndex;
 Node*[4] connections;
 }

 void InitializePathGraph()
 {
 for( int x = 0; x < mapWidth; x++ )
 {
 for( int y = 0; y < mapHeight; y++ )
 {
 Node node;
 PathGraph[x][y] = node;// ERROR
 }
 }
 }

Do you want to initialize with the default value of Node? Then it is as easy as the following: import std.stdio; struct Node {} void main() { Node[2][3] a; // fixed-length of fixed-length Node[][] b = new Node[][](2, 3); // slice of slice writeln(a); writeln(b); } The output: [[Node(), Node()], [Node(), Node()], [Node(), Node()]] [[Node(), Node(), Node()], [Node(), Node(), Node()]] Please note the different meanings of 2 and 3 for the fixed-length array and the new expression: lines and rows are swapped! Ali
Mar 31 2012
prev sibling parent "Chris Pons" <cmpons gmail.com> writes:
Yes sorry, I was looking to initialize to the default value of 
node. Thank you for the help!

On Saturday, 31 March 2012 at 21:59:50 UTC, Ali Çehreli wrote:
 On 03/31/2012 02:34 PM, Chris Pons wrote:
 I'm trying to figure out how to initialize a

 with a struct. I thought it would be straight forward, but

 into problems. I'm using nested for loops, and just setting

 index to a blank version of my struct but that gives me this

 "Error: no [] operator overload for type Node". I didn't know

 to overload that operator, usually didn't need to in C++ as

 remember.

 struct Node
 {
 bool walkable;
 vect2 position;
 int xIndex, yIndex;
 Node*[4] connections;
 }

 void InitializePathGraph()
 {
 for( int x = 0; x < mapWidth; x++ )
 {
 for( int y = 0; y < mapHeight; y++ )
 {
 Node node;
 PathGraph[x][y] = node;// ERROR
 }
 }
 }

Do you want to initialize with the default value of Node? Then it is as easy as the following: import std.stdio; struct Node {} void main() { Node[2][3] a; // fixed-length of fixed-length Node[][] b = new Node[][](2, 3); // slice of slice writeln(a); writeln(b); } The output: [[Node(), Node()], [Node(), Node()], [Node(), Node()]] [[Node(), Node(), Node()], [Node(), Node(), Node()]] Please note the different meanings of 2 and 3 for the fixed-length array and the new expression: lines and rows are swapped! Ali

Mar 31 2012