template: no matching function call. Converting const value to constreference.

Discussion in 'C++' started by cablepuff@gmail.com, Dec 6, 2007.

  1. Guest

    template <typename ContainerType>
    ContainerType rsa_encrypt_list(const std::string&, const typename
    ContainerType::reference, const typename ContainerType::reference);

    const BigInteger e(boost::lexical_cast<BigInteger>(rsa_encrypts[2]));
    const BigInteger
    n(boost::lexical_cast<BigInteger>(rsa_encrypts[1]));
    std::string infile(rsa_encrypts[0]);
    boost::scoped_ptr<boost::filesystem::ifstream> encrypt_input(new
    boost::filesystem::ifstream(infile));
    const std::string
    plaintext(std::istreambuf_iterator<char>(encrypt_input->rdbuf()),
    std::istreambuf_iterator<char>());
    std::list<BigInteger>
    decrypted_list(encryptcpw::rsa_encrypt_list<std::list<BigInteger>
    >(plaintext, e, n)); // this is line 64.


    std::vector<BigInteger>(ciphertext).swap(ciphertext);
    // ... some code in between.
    const std::string answer(encryptcpw::rsa_decrypt_list(ciphertext, d,
    n)); // this is line 102.


    error on gcc:
    ../cs512/c++/RsaEncrypt.cpp:64: error: no matching function for call to
    'rsa_encr
    ypt_list(const std::string&, const BigInteger&, const BigInteger&)'
    ../cs512/c++/RsaEncrypt.cpp:102: error: no matching function for call
    to 'rsa_dec
    rypt_list(std::vector<BigInteger, std::allocator<BigInteger> >&, const
    BigIntege
    r&, const BigInteger&)'


    error on msvc:
    ../cs512/c++/RsaEncrypt.cpp(64) : error C2664:
    'encryptcpw::rsa_encrypt_list' : cannot convert parameter 2 from
    'const BigInteger' to 'BigInteger &'
    Conversion loses qualifiers

    Anybody know how to fix this.
     
    , Dec 6, 2007
    #1
    1. Advertising

  2. Re: template: no matching function call. Converting const value toconst reference.

    On Dec 6, 5:12 am, "" <> wrote:
    > template <typename ContainerType>
    > ContainerType rsa_encrypt_list(const std::string&, const typename
    > ContainerType::reference, const typename ContainerType::reference);
    >
    > const BigInteger e(boost::lexical_cast<BigInteger>(rsa_encrypts[2]));
    > const BigInteger
    > n(boost::lexical_cast<BigInteger>(rsa_encrypts[1]));
    > std::string infile(rsa_encrypts[0]);
    > boost::scoped_ptr<boost::filesystem::ifstream> encrypt_input(new
    > boost::filesystem::ifstream(infile));
    > const std::string
    > plaintext(std::istreambuf_iterator<char>(encrypt_input->rdbuf()),
    > std::istreambuf_iterator<char>());
    > std::list<BigInteger>
    > decrypted_list(encryptcpw::rsa_encrypt_list<std::list<BigInteger>
    >
    > >(plaintext, e, n)); // this is line 64.

    >
    > std::vector<BigInteger>(ciphertext).swap(ciphertext);
    > // ... some code in between.
    > const std::string answer(encryptcpw::rsa_decrypt_list(ciphertext, d,
    > n)); // this is line 102.
    >
    > error on gcc:
    > ./cs512/c++/RsaEncrypt.cpp:64: error: no matching function for call to
    > 'rsa_encr
    > ypt_list(const std::string&, const BigInteger&, const BigInteger&)'
    > ./cs512/c++/RsaEncrypt.cpp:102: error: no matching function for call
    > to 'rsa_dec
    > rypt_list(std::vector<BigInteger, std::allocator<BigInteger> >&, const
    > BigIntege
    > r&, const BigInteger&)'
    >
    > error on msvc:
    > ./cs512/c++/RsaEncrypt.cpp(64) : error C2664:
    > 'encryptcpw::rsa_encrypt_list' : cannot convert parameter 2 from
    > 'const BigInteger' to 'BigInteger &'
    > Conversion loses qualifiers
    >
    > Anybody know how to fix this.


    I believe the problem is here:

    template <typename ContainerType>
    ContainerType rsa_encrypt_list(const std::string&, const typename
    ContainerType::reference, const typename ContainerType::reference);

    ... you can't const-qualify ContainerType::reference; Comeau online
    gives warning "warning: type qualifiers are meaningless in this
    declaration"

    you need instead:
    template <typename ContainerType>
    ContainerType rsa_encrypt_list(const std::string&, typename
    ContainerType::const_reference, typename
    ContainerType::const_reference);

    and define const_reference in your ContainerType(s) accordingly.
     
    tragomaskhalos, Dec 6, 2007
    #2
    1. Advertising

  3. Guest

    Re: template: no matching function call. Converting const value toconst reference.

    On Dec 6, 5:05 am, tragomaskhalos <>
    wrote:
    > On Dec 6, 5:12 am, "" <> wrote:
    >
    >
    >
    > > template <typename ContainerType>
    > > ContainerType rsa_encrypt_list(const std::string&, const typename
    > > ContainerType::reference, const typename ContainerType::reference);

    >
    > > const BigInteger e(boost::lexical_cast<BigInteger>(rsa_encrypts[2]));
    > > const BigInteger
    > > n(boost::lexical_cast<BigInteger>(rsa_encrypts[1]));
    > > std::string infile(rsa_encrypts[0]);
    > > boost::scoped_ptr<boost::filesystem::ifstream> encrypt_input(new
    > > boost::filesystem::ifstream(infile));
    > > const std::string
    > > plaintext(std::istreambuf_iterator<char>(encrypt_input->rdbuf()),
    > > std::istreambuf_iterator<char>());
    > > std::list<BigInteger>
    > > decrypted_list(encryptcpw::rsa_encrypt_list<std::list<BigInteger>

    >
    > > >(plaintext, e, n)); // this is line 64.

    >
    > > std::vector<BigInteger>(ciphertext).swap(ciphertext);
    > > // ... some code in between.
    > > const std::string answer(encryptcpw::rsa_decrypt_list(ciphertext, d,
    > > n)); // this is line 102.

    >
    > > error on gcc:
    > > ./cs512/c++/RsaEncrypt.cpp:64: error: no matching function for call to
    > > 'rsa_encr
    > > ypt_list(const std::string&, const BigInteger&, const BigInteger&)'
    > > ./cs512/c++/RsaEncrypt.cpp:102: error: no matching function for call
    > > to 'rsa_dec
    > > rypt_list(std::vector<BigInteger, std::allocator<BigInteger> >&, const
    > > BigIntege
    > > r&, const BigInteger&)'

    >
    > > error on msvc:
    > > ./cs512/c++/RsaEncrypt.cpp(64) : error C2664:
    > > 'encryptcpw::rsa_encrypt_list' : cannot convert parameter 2 from
    > > 'const BigInteger' to 'BigInteger &'
    > > Conversion loses qualifiers

    >
    > > Anybody know how to fix this.

    >
    > I believe the problem is here:
    >
    > template <typename ContainerType>
    > ContainerType rsa_encrypt_list(const std::string&, const typename
    > ContainerType::reference, const typename ContainerType::reference);
    >
    > .. you can't const-qualify ContainerType::reference; Comeau online
    > gives warning "warning: type qualifiers are meaningless in this
    > declaration"
    >
    > you need instead:
    > template <typename ContainerType>
    > ContainerType rsa_encrypt_list(const std::string&, typename
    > ContainerType::const_reference, typename
    > ContainerType::const_reference);
    >
    > and define const_reference in your ContainerType(s) accordingly.


    thanks that fixes everything.
     
    , Dec 7, 2007
    #3
  4. Guest

    Re: template: no matching function call. Converting const value toconst reference.

    On Dec 6, 6:05 pm, "" <> wrote:
    > On Dec 6, 5:05 am, tragomaskhalos <>
    > wrote:
    >
    >
    >
    > > On Dec 6, 5:12 am, "" <> wrote:

    >
    > > > template <typename ContainerType>
    > > > ContainerType rsa_encrypt_list(const std::string&, const typename
    > > > ContainerType::reference, const typename ContainerType::reference);

    >
    > > > const BigInteger e(boost::lexical_cast<BigInteger>(rsa_encrypts[2]));
    > > > const BigInteger
    > > > n(boost::lexical_cast<BigInteger>(rsa_encrypts[1]));
    > > > std::string infile(rsa_encrypts[0]);
    > > > boost::scoped_ptr<boost::filesystem::ifstream> encrypt_input(new
    > > > boost::filesystem::ifstream(infile));
    > > > const std::string
    > > > plaintext(std::istreambuf_iterator<char>(encrypt_input->rdbuf()),
    > > > std::istreambuf_iterator<char>());
    > > > std::list<BigInteger>
    > > > decrypted_list(encryptcpw::rsa_encrypt_list<std::list<BigInteger>

    >
    > > > >(plaintext, e, n)); // this is line 64.

    >
    > > > std::vector<BigInteger>(ciphertext).swap(ciphertext);
    > > > // ... some code in between.
    > > > const std::string answer(encryptcpw::rsa_decrypt_list(ciphertext, d,
    > > > n)); // this is line 102.

    >
    > > > error on gcc:
    > > > ./cs512/c++/RsaEncrypt.cpp:64: error: no matching function for call to
    > > > 'rsa_encr
    > > > ypt_list(const std::string&, const BigInteger&, const BigInteger&)'
    > > > ./cs512/c++/RsaEncrypt.cpp:102: error: no matching function for call
    > > > to 'rsa_dec
    > > > rypt_list(std::vector<BigInteger, std::allocator<BigInteger> >&, const
    > > > BigIntege
    > > > r&, const BigInteger&)'

    >
    > > > error on msvc:
    > > > ./cs512/c++/RsaEncrypt.cpp(64) : error C2664:
    > > > 'encryptcpw::rsa_encrypt_list' : cannot convert parameter 2 from
    > > > 'const BigInteger' to 'BigInteger &'
    > > > Conversion loses qualifiers

    >
    > > > Anybody know how to fix this.

    >
    > > I believe the problem is here:

    >
    > > template <typename ContainerType>
    > > ContainerType rsa_encrypt_list(const std::string&, const typename
    > > ContainerType::reference, const typename ContainerType::reference);

    >
    > > .. you can't const-qualify ContainerType::reference; Comeau online
    > > gives warning "warning: type qualifiers are meaningless in this
    > > declaration"

    >
    > > you need instead:
    > > template <typename ContainerType>
    > > ContainerType rsa_encrypt_list(const std::string&, typename
    > > ContainerType::const_reference, typename
    > > ContainerType::const_reference);

    >
    > > and define const_reference in your ContainerType(s) accordingly.

    >
    > thanks that fixes everything.


    now i got a new problem.
    template <typename OutputIterator>
    OutputIterator str_to_numlist(OutputIterator OutIt, const std::string&
    s, typename OutputIterator::const_reference bound)
    {
    // some code.
    }

    template <typename ContainerType>
    ContainerType encryptcpw::rsa_encrypt_list(const std::string& text,
    typename ContainerType::const_reference e, typename
    ContainerType::const_reference n)
    {
    typedef typename ContainerType::value_type T;
    BOOST_STATIC_ASSERT(((std::numeric_limits<T>::is_integer) ||
    (std::numeric_limits<T>::is_float)));
    ContainerType encrypted_list;
    encryptcpw::str_to_numlist(std::back_inserter(encrypted_list),
    text, n);
    BOOST_FOREACH(T& val, encrypted_list)
    {
    val = encryptcpw::rsa_encrypt(val, e, n);
    }
    return encrypted_list;
    }

    my error is this
    : error :
    ../cs512/c++/RsaEncrypt.cpp:64: instantiated from here
    ../cs512/c++/cppdef/rsa.cpp:205: error: no matching function for call
    to 'str_to_
    numlist(std::back_insert_iterator<std::list<BigInteger,
    std::allocator<BigIntege
    r> > >, const std::basic_string<char, std::char_traits<char>,
    std::allocator<cha
    r> >&, const BigInteger&)'

    Is it because the template parameter are different type that it gets
    confuse? isn't const T& of std::back_inserter(std::list) same as const
    T& of std::list
     
    , Dec 7, 2007
    #4
    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. u.int.32.t
    Replies:
    11
    Views:
    598
    Ian Collins
    Apr 24, 2007
  2. Fabian Wein
    Replies:
    8
    Views:
    475
    terminator
    Jul 26, 2007
  3. Javier
    Replies:
    2
    Views:
    603
    James Kanze
    Sep 4, 2007
  4. Singulus
    Replies:
    19
    Views:
    635
    James Kanze
    Nov 25, 2008
  5. Singulus
    Replies:
    0
    Views:
    287
    Singulus
    Nov 22, 2008
Loading...

Share This Page