469,160 Members | 1,990 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

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

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

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<inttest1;

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!

May 23 '07 #1
2 8734
na*****************@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<inttest1;

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
May 23 '07 #2
On 23 mai, 17:22, nassim.bouayad.a...@gmail.com wrote:
On 23 mai, 16:59, "Victor Bazarov" <v.Abaza...@comAcast.netwrote:


nassim.bouayad.a...@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<inttest1;
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- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -- Masquer le texte desmessages 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.

May 24 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Thomas Matthews | last post: by
14 posts views Thread by Bart Samwel | last post: by
2 posts views Thread by jeffp | last post: by
11 posts views Thread by mathieu | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
1 post views Thread by Mortomer39 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.