Re: Template : cannot convert parameter 1 from const * to *const & ?
nassim.bouayad.agha@gmail.com wrote:
Hello,
here is a code snippet showning my problem :
The first problem is all those underscores. Why do you think
you need them at all?
template<typename _K>
class TClass1
{
public:
void Process(const _K& arg) const
{
}
};
template<typename _I>
class TClass2
{
public:
void Process(const _I* & arg) const
{
_class1.Process(arg);
'_I' is 'int', right? '_class1' then 'TClass1<int*>', right?
Then its template argument (the '_K' inside) is 'int*', right?
What's the specification of the 'Process' member, then?
void TClass1<int*>::Process(int* const&);
So, when you're calling '_class1.Process', what argument type
are you giving? '_I const * &'. Considering '_I' is 'int',
you are trying to call 'Process' with
int const * &
instead of
int * const &
.. Decide on the position of the const. Or drop the * from
the definition of '_class1'.
}
protected:
TClass1<_I*> _class1;
};
int main(int argc, char* argv[])
{
TClass2<int> test1;
int* ptr = new int;
test1.Process(ptr);
delete ptr;
return 0;
}
This code does not compile, I have got the following error message :
"cannot convert parameter 1 from 'const int *' to 'int *const & '"
Any idea?I have noted that if I declare _class1 as TClass1<const _I*>,
it is working...
Right. If you add a const at the _I, the function you're trying to
call is
void TClass1<int const*>::Process(int const* const&);
which is fine. Its argument ('int const* const&') is compatible with
'int const* &' you're trying to give it.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask