Template : cannot convert parameter 1 from const * to *const & ?

  • Thread starter nassim.bouayad.agha
  • Start date
N

nassim.bouayad.agha

Hello,
here is a code snippet showning my problem :

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);
}
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...
Regards!
 
V

Victor Bazarov

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
 
N

nassim.bouayad.agha

The first problem is all those underscores. Why do you think
you need them at all?
'_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.
- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -

Thank you!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -

Hello,
I still have a problem.The exemple that I gave is trivial,but how can
I do if I need to use this,for stl containers?For exemple,if I want a
multimap which key is a pointer on a type?!This may cause problems
because I need to store pointers to non const objects...
Any idea?
Thank you in advance.
Regards.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top