Afficher un message
Vieux 06/12/2007, 14h05   #2
tragomaskhalos
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: template: no matching function call. Converting const value toconst reference.

On Dec 6, 5:12 am, "cablep...@gmail.com" <cablep...@gmail.com> 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_i nput->rdbuf()),
> std::istreambuf_iterator<char>());
> std::list<BigInteger>
> decrypted_list(encryptcpw::rsa_encrypt_list<std::l ist<BigInteger>
>
> >(plaintext, e, n)); // this is line 64.

>
> std::vector<BigInteger>(ciphertext).swap(ciphertex t);
> // ... 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.


  Réponse avec citation
 
Page generated in 0,05630 seconds with 9 queries