template <class LISTITEM> class listI;
template <class LISTITEM>
class listM
{
public:
listManager();
~listManager();
LISTITEM *AddItem();
listI<LISTITEM> *getI();
friendclass listI<LISTITEM>;
protected:
template <class LISTITEM>
class structListItem
{
public:
class structListItem *prevStruct;
class structListItem *nextStruct;
LISTITEM *currItem;
structListItem();
~structListItem();
};
template <class LISTITEM>
class iterListItem // To define the list of iterators
{
public:
class iterListItem *prevIter;
class iterListItem *nextIter;
class listI<LISTITEM> *currIter;
iterListItem();
~iterListItem();
};
iterListItem<LISTITEM> *iterators;
class structListItem<LISTITEM> *firstStructList;
class structListItem<LISTITEM> *lastStructList;
};
template <class LISTITEM>
class listI
{
public:
listI(listM<LISTITEM> *listMn);
LISTITEM *nextStructListItem(); // Function to return the next LISTITEM
LISTITEM *prevStructListItem(); // Function to return the previous LISTITEM
LISTITEM *currStructListItem(); // Function to return the current LISTITEM
void pointToStart(); // Point the currListItem pointer so that nextStructListItem gives the firstStructList Item
void pointToEnd(); // Point the currListItem pointer to the lastStructList item
private:
listM<LISTITEM> *myList;
listM<LISTITEM>::structListItem<LISTITEM> *currStructList;
};
Sorry about not writing the question properly. Will keep in mind in future. I am using MinGW. The problem was got resolved when I removed the iterListItem and structListItem as templates and made them regular classes.