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

Discussion in 'C++' started by nassim.bouayad.agha@gmail.com, May 23, 2007.

  1. Guest

    On 23 mai, 16:59, "Victor Bazarov" <> wrote:
    > 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- Masquer le texte des messages précédents -
    >
    > - 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!
     
    , May 23, 2007
    #1
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Alfonso Morra
    Replies:
    3
    Views:
    1,808
    Christopher Benson-Manica
    Aug 12, 2005
  2. John Smith
    Replies:
    6
    Views:
    5,366
    Mike Wahler
    Oct 31, 2005
  3. Replies:
    2
    Views:
    845
  4. Replies:
    0
    Views:
    636
  5. Stuart Redmann
    Replies:
    5
    Views:
    496
    Stuart Redmann
    Dec 14, 2007
Loading...

Share This Page