469,636 Members | 1,516 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,636 developers. It's quick & easy.

problem with inner class involving template

Please check this program...When I compiles it in VC.net, it gives the
following error:
===============
Common\Lib\PList.h(115): error C2440: '=' : cannot convert from
'ListNode *' to 'List<T>::ListNode *'
with
[
T=float
]
Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
project\Source\Levelmgr.cpp(198) : while compiling
class-template member function 'List<T>::Iterator::Iterator(List<T>
*)'
with
[
T=float
]
project\Source\Levelmgr.cpp(15) : see reference to class
template instantiation 'List<T>::Iterator' being compiled
with
[
T=float
]

===============
when I tried to change it to

template<typename T>
List<T>::ListNode * List<T>::Head(void)
{
return m_pstart;
}

instead of

template<typename T>
ListNode * List<T>::Head(void)
{
return m_pstart;
}, it gives the error:
======================
Common\Lib\PList.h(89): error C2065: 'T' : undeclared identifier
======================

Could anyone please explain what is wrong here?

Thanks,

CODE:
__________________________________________________ ____________________________

#ifndef PLIST__H__
#define PLIST__H__

class ListNode;

/**
LinkedList class
*/
template<typename T>
class List
{

public:
void Init(void);
void Cleanup(void);
BOOL AddItem(T data);
ListNode * Head(void);

private:
/**
A node of the list
*/
class ListNode
{
ListNode(void){}
ListNode(const T& data, ListNode *next):m_data(data), m_next(next){}

public:
T m_data; ///<data
ListNode *m_next; ///<link to the next node
};

uint16 m_num_elems; ///<Number of elements in the list
ListNode *m_pstart; ///<Pointer to the first element of the list

public:
class Iterator
{
public:
Iterator(List<T> *plist);
void operator++(void);
T Content(void);

private:
List<T> *m_plist; ///<Pointer to the list
ListNode *m_plistnode; ///<Pointer to the listnode
};
};

//////////////////////////////////////////////////////////
//List
//////////////////////////////////////////////////////////

/**
Init List
*/
template<typename T>
void List<T>::Init(void)
{
m_num_elems = 0;
m_pstart = NULL;
}

/**
Add item to the front of the list
\param[in] data Data to be stored in the list
*/
template<typename T>
BOOL List<T>::AddItem(T data)
{
BOOL res = TRUE;
m_pstart = new ListNode(data, m_pstart);
if(!m_pstart)
{
LOG_FAILED;
ERXIT;
}
m_num_elems++;
xit:
LOG_IF_FAILED;
return res;
}

/**
Get the pointer to the first item in the list
*/
template<typename T>
ListNode * List<T>::Head(void)
{
return m_pstart;
}

/**
Cleanup routine
*/
template<typename T>
void List<T>::Cleanup(void)
{

}

////////////////////////////////////////////////////////////
//Iterator
///////////////////////////////////////////////////////////

/**
CTOR for iterator
\param[in] plist Pointer to list
*/
template<typename T>
List<T>::Iterator::Iterator(List<T> *plist)
:m_plist(plist)
{
m_plistnode = plist->Head();//<------ERROR
}

/**
Increment operator
*/
template<typename T>
void List<T>::Iterator::operator++(void)
{
m_plistnode = m_plistnode->m_next;
}

/**
Get the content of the node iterator currently points
return content of the node iterator currently points
*/
template<typename T>
T List<T>::Iterator::Content(void)
{
return m_plistnode->m_data;
}

#endif//PLIST__H__
Jul 23 '05 #1
1 1947
darkstorm wrote:
Please check this program...When I compiles it in VC.net, it gives the
following error:
=============== [...]
when I tried to change it to

template<typename T>
List<T>::ListNode * List<T>::Head(void)
Shouldn't this be

template<typename T>
typename List<T>::ListNode * List<T>::Head()

???
{
return m_pstart;
}
[...]


Anyway, see my other reply too.
Jul 23 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by r5 | last post: by
2 posts views Thread by Thomas Lorenz | last post: by
3 posts views Thread by darkstorm | last post: by
4 posts views Thread by Mark P | last post: by
5 posts views Thread by Martijn Mulder | last post: by
1 post views Thread by mrstephengross | last post: by
1 post views Thread by Jens Mander | last post: by
3 posts views Thread by Christof Warlich | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.