PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.cplus > template: no matching function call. Converting const value to constreference.
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
template: no matching function call. Converting const value to constreference.

Réponse
 
LinkBack Outils de la discussion
Vieux 06/12/2007, 05h12   #1
cablepuff@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut template: no matching function call. Converting const value to constreference.

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.
  Réponse avec citation
Vieux 06/12/2007, 13h05   #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
Vieux 07/12/2007, 02h05   #3
cablepuff@gmail.com
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: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.
  Réponse avec citation
Vieux 07/12/2007, 06h53   #4
cablepuff@gmail.com
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: template: no matching function call. Converting const value toconst reference.

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
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 12h35.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,26033 seconds with 12 queries