Binary Heap Errors Class level vs function level

Chris Pons cmpons at gmail.com
Wed Apr 4 17:24:24 PDT 2012


I'm still messing around with binary heaps. I've successfully 
created and used it on the function level but for some reason 
when I move it to the class level I get an error. Furthermore, 
i'm not entirely sure how to use a binary heap without auto as 
the type.

class AStar
{
ReferenceNode[] openListContainer;
auto openList = BinaryHeap!(ReferenceNode[], "a.fScore > 
b.fScore")(openListContainer, 0 ); // Error
}


Error	1	Error: template instance 
BinaryHeap!(ReferenceNode[],"a.fScore > b.fScore") 
BinaryHeap!(ReferenceNode[],"a.fScore > b.fScore") does not match 
template declaration BinaryHeap(Store,alias less = "a < b") if 
(isRandomAccessRange!(Store) || 
isRandomAccessRange!(typeof(Store.init[])))	C:\Users\CP\Documents\Visual 
Studio 2010\Projects\D\STDS\NPC.d	101	


However this is ok:

class AStar
{
void RandomFunction()
{
ReferenceNode[] openListContainer;
openListContainer.length = 500;
auto openList = BinaryHeap!(ReferenceNode[], "a.fScore > 
b.fScore")(openListContainer, 0 ); //This is ok
}
}

I'd also like to try this, but can't seem to figure it out:

class AStar
{
ReferenceNode[] openListContainer;
auto openList; //no identifier for declarator openlist

this()
{
openListContainer.length = 500;
openList = = BinaryHeap!(ReferenceNode[], "a.fScore > 
b.fScore")(openListContainer, 0 );
}
}

If I know what type openList was, after creating the heap, I 
could simply use that. I tried using typeid( openList ) to find 
out. I got the type being something like:

BinaryHeap!(Referencenode[], "a.fScore > b.fScore") openList;

However trying to use this as the type gives me this error:


Error	1	Error: template instance 
BinaryHeap!(ReferenceNode[],"a.fScore > b.fScore") 
BinaryHeap!(ReferenceNode[],"a.fScore > b.fScore") does not match 
template declaration BinaryHeap(Store,alias less = "a < b") if 
(isRandomAccessRange!(Store) || 
isRandomAccessRange!(typeof(Store.init[])))	C:\Users\CP\Documents\Visual 
Studio 2010\Projects\D\STDS\NPC.d	101	


Error	2	Error: BinaryHeap!(ReferenceNode[],"a.fScore > b.fScore") 
is used as a type	C:\Users\CP\Documents\Visual Studio 
2010\Projects\D\STDS\NPC.d	101	

I'm just trying to get a variable called openList to the class 
level so it doesn't keep getting initialized everytime the 
function is called.

Any ideas on how to work this out?


More information about the Digitalmars-d-learn mailing list