Discussion:
[Openexr-user] Hi everybody
Dharmendra Bhojwani
2006-10-10 10:07:15 UTC
Permalink
I have a function declaration like this in a template class.

template <class T> class CElement
{
public:
template <class Y> bool _internal_less (CElement<Y> const& rhs) const;
};

And following is the function defination...

template <class T, class Y> inline
bool CElement <T>::_internal_less (CElement<Y> const& rhs) const
{
return iCount < rhs.iCount;
}

when i compile it using , g++ , it gives error ....

"prototype for `bool CElement<T>::_internal_less(const CElement<Y>&) const' does not match any in class `CElement<T>'"
Can any body please help to findout the problem ?
Thanks


---------------------------------
All-new Yahoo! Mail - Fire up a more powerful email and get things done faster.
Kevin Wheatley
2006-10-10 10:21:55 UTC
Permalink
Post by Dharmendra Bhojwani
I have a function declaration like this in a template class.
template <class T> class CElement
{
template <class Y> bool _internal_less (CElement<Y> const& rhs) const;
};
And following is the function defination...
template <class T, class Y> inline
bool CElement <T>::_internal_less (CElement<Y> const& rhs) const
{
return iCount < rhs.iCount;
}
when i compile it using , g++ , it gives error ....
"prototype for `bool CElement<T>::_internal_less(const CElement<Y>&)
const' does not match any in class `CElement<T>'"
couple of suggestions...

you can't define an inline function out of line ... also you need two
separate template<> parameter definitions in your out of line
definition, one for the class template and one for the template member
function. With such a simple function I'd use an inline definition
especially if you have profiling data to backup your need for inlining
the function:

template <class T> class CElement
{
public:
template <class Y>
bool _internal_less (CElement<Y> const& rhs) const
{
return iCount < rhs.iCount;
}
};

If you want an out of line definition then something like this should
work:

template <class T>
template <class Y>
bool CElement <T>::_internal_less (CElement<Y> const& rhs) const
{
return iCount < rhs.iCount;
}

Kevin
--
| Kevin Wheatley, Cinesite (Europe) Ltd | Nobody thinks this |
| Senior Technology | My employer for certain |
| And Network Systems Architect | Not even myself |
Continue reading on narkive:
Loading...