|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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. |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
On Dec 6, 5:05 am, tragomaskhalos <dave.du.verg...@logicacmg.com>
wrote: > 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. thanks that fixes everything. |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
On Dec 6, 6:05 pm, "cablep...@gmail.com" <cablep...@gmail.com> wrote:
> On Dec 6, 5:05 am, tragomaskhalos <dave.du.verg...@logicacmg.com> > wrote: > > > > > 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. > > 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_i nteger) || (std::numeric_limits<T>::is_float))); ContainerType encrypted_list; encryptcpw::str_to_numlist(std::back_inserter(encr ypted_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<BigInt eger, 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 |
|
![]() |
| Outils de la discussion | |
|
|