Bonjour,
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
};
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
}
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur :
[...]
et notamment le __cdecl *
Bonjour,
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
};
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
}
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur :
[...]
et notamment le __cdecl *
Bonjour,
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
};
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
}
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur :
[...]
et notamment le __cdecl *
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
};
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
}
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur
:
serialize.cpp(4) : error C2511: '()' : overloaded member function
'class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > &,class
C,class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
serialize.cpp(8) : error C2955: 'Serialize' : use of class template
requires template argument list
serialize.h(15) : see declaration of 'Serialize'
serialize.cpp(8) : error C2955: 'Serialize' : use of class template
requires template argument list
serialize.h(15) : see declaration of 'Serialize'
et notamment le __cdecl *
visiblement, il cherche la fonction F, mais ne la trouve pas.
Quelqu'un pourrait-t-il m'expliquer ?
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
};
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
}
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur
:
serialize.cpp(4) : error C2511: '()' : overloaded member function
'class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > &,class
C,class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
serialize.cpp(8) : error C2955: 'Serialize' : use of class template
requires template argument list
serialize.h(15) : see declaration of 'Serialize'
serialize.cpp(8) : error C2955: 'Serialize' : use of class template
requires template argument list
serialize.h(15) : see declaration of 'Serialize'
et notamment le __cdecl *
visiblement, il cherche la fonction F, mais ne la trouve pas.
Quelqu'un pourrait-t-il m'expliquer ?
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
};
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
}
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur
:
serialize.cpp(4) : error C2511: '()' : overloaded member function
'class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > &,class
C,class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
serialize.cpp(8) : error C2955: 'Serialize' : use of class template
requires template argument list
serialize.h(15) : see declaration of 'Serialize'
serialize.cpp(8) : error C2955: 'Serialize' : use of class template
requires template argument list
serialize.h(15) : see declaration of 'Serialize'
et notamment le __cdecl *
visiblement, il cherche la fonction F, mais ne la trouve pas.
Quelqu'un pourrait-t-il m'expliquer ?
AG wrote:J'ai tenté ça :#include <string>template <class C> class Serialize
{
public:typedef std::string CToString (C);std::string operator() (std::string &id, C value, CToString F);
Est-ce que le premier paramètre ne doit pas être const ?
Pour tout t'avouer, j'ai décidé, dans mon processus d'apprentissage du
Aussi, pourquoi cette fonction est-elle membre de la classe ?
Dans l'implémentation, elle ne semble rien utiliser de la
classe.
C'est vrai. Il faudrait alors que je fasse une fonction template plutôt
Il manque un « template< class C > » ici, pour que la fonction
suivante soit légal.
Oui, Loïc me l'a indiqué, j'ai compris maintenant.
std::string Serialize<class C>::operator ()(std::string & id,C value,CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
Je ne sais pas ce que ça veut dire d'ajouter une fonction
(std::endl) à une chaîne. De toute façon, étant donné que la
fonction est un template, le compilateur ne sait pas laquelle
prendre.
Peut-être simplement "n" ?
oui, c'est ce à quoi je pensais. Je croyais que c'était la même chose,
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur
:serialize.cpp(4) : error C2511: '()' : overloaded member function
'classstd::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > &,class
C,class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
D'après le message d'erreur, ce n'est pas ça. Essaie en
remplaçant « class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > » par
std::string dans le message d'erreur. Ce qu'il ne trouve pas,
c'est std::string ()(std::string&, class C, std::string
(*)(class C)) », c-à-d ton opérateur même.
Essaie déjà avec les corrections que j'ai proposé. Avec le
template en plus avant la définition de la fonction et la
substitution de 'n' pour std::endl, ça marche chez moi (Sun
CC 5.5 ou g++ 3.4.3). Mais je me poserais aussi des questions
vis-à-vis des const, voir même si la fonction doit être membre.
AG wrote:
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
Est-ce que le premier paramètre ne doit pas être const ?
Pour tout t'avouer, j'ai décidé, dans mon processus d'apprentissage du
Aussi, pourquoi cette fonction est-elle membre de la classe ?
Dans l'implémentation, elle ne semble rien utiliser de la
classe.
C'est vrai. Il faudrait alors que je fasse une fonction template plutôt
Il manque un « template< class C > » ici, pour que la fonction
suivante soit légal.
Oui, Loïc me l'a indiqué, j'ai compris maintenant.
std::string Serialize<class C>::operator ()(std::string & id,C value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
Je ne sais pas ce que ça veut dire d'ajouter une fonction
(std::endl) à une chaîne. De toute façon, étant donné que la
fonction est un template, le compilateur ne sait pas laquelle
prendre.
Peut-être simplement "n" ?
oui, c'est ce à quoi je pensais. Je croyais que c'était la même chose,
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur
:
serialize.cpp(4) : error C2511: '()' : overloaded member function
'class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > &,class
C,class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
D'après le message d'erreur, ce n'est pas ça. Essaie en
remplaçant « class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > » par
std::string dans le message d'erreur. Ce qu'il ne trouve pas,
c'est std::string ()(std::string&, class C, std::string
(*)(class C)) », c-à-d ton opérateur même.
Essaie déjà avec les corrections que j'ai proposé. Avec le
template en plus avant la définition de la fonction et la
substitution de 'n' pour std::endl, ça marche chez moi (Sun
CC 5.5 ou g++ 3.4.3). Mais je me poserais aussi des questions
vis-à-vis des const, voir même si la fonction doit être membre.
AG wrote:J'ai tenté ça :#include <string>template <class C> class Serialize
{
public:typedef std::string CToString (C);std::string operator() (std::string &id, C value, CToString F);
Est-ce que le premier paramètre ne doit pas être const ?
Pour tout t'avouer, j'ai décidé, dans mon processus d'apprentissage du
Aussi, pourquoi cette fonction est-elle membre de la classe ?
Dans l'implémentation, elle ne semble rien utiliser de la
classe.
C'est vrai. Il faudrait alors que je fasse une fonction template plutôt
Il manque un « template< class C > » ici, pour que la fonction
suivante soit légal.
Oui, Loïc me l'a indiqué, j'ai compris maintenant.
std::string Serialize<class C>::operator ()(std::string & id,C value,CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
Je ne sais pas ce que ça veut dire d'ajouter une fonction
(std::endl) à une chaîne. De toute façon, étant donné que la
fonction est un template, le compilateur ne sait pas laquelle
prendre.
Peut-être simplement "n" ?
oui, c'est ce à quoi je pensais. Je croyais que c'était la même chose,
Mais ça ne compile pas. je ne comprends pas bien le message d'erreur
:serialize.cpp(4) : error C2511: '()' : overloaded member function
'classstd::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > &,class
C,class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
D'après le message d'erreur, ce n'est pas ça. Essaie en
remplaçant « class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > » par
std::string dans le message d'erreur. Ce qu'il ne trouve pas,
c'est std::string ()(std::string&, class C, std::string
(*)(class C)) », c-à-d ton opérateur même.
Essaie déjà avec les corrections que j'ai proposé. Avec le
template en plus avant la définition de la fonction et la
substitution de 'n' pour std::endl, ça marche chez moi (Sun
CC 5.5 ou g++ 3.4.3). Mais je me poserais aussi des questions
vis-à-vis des const, voir même si la fonction doit être membre.
wrote:AG wrote:J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
Est-ce que le premier paramètre ne doit pas être const ?
Pour tout t'avouer, j'ai décidé, dans mon processus
d'apprentissage du C++, de laisser de coté les histoires de
"const" pour l'instant. Je n'arrive pas à traiter tous les
problèmes en même temps, et j'avais l'impression que mettre le
"const" de coté au début n'était pas primordial. Mais peut
être ai-je tord.
Aussi, pourquoi cette fonction est-elle membre de la classe
? Dans l'implémentation, elle ne semble rien utiliser de la
classe.
C'est vrai. Il faudrait alors que je fasse une fonction
template plutôt qu'une classe ?
Il manque un « template< class C > » ici, pour que la
fonction suivante soit légal.
Oui, Loïc me l'a indiqué, j'ai compris maintenant.std::string Serialize<class C>::operator ()(std::string & id,C
value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
Je ne sais pas ce que ça veut dire d'ajouter une fonction
(std::endl) à une chaîne. De toute façon, étant donné que la
fonction est un template, le compilateur ne sait pas
laquelle prendre.
Peut-être simplement "n" ?
oui, c'est ce à quoi je pensais. Je croyais que c'était la
même chose, mais en plus portable. Visiblement non.
Mais ça ne compile pas. je ne comprends pas bien le message
d'erreur :
serialize.cpp(4) : error C2511: '()' : overloaded member
function 'class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > (class
std::basic_string<cha r,struct std::char_traits<char>,class
std::allocator<char> > &,class C,class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
D'après le message d'erreur, ce n'est pas ça. Essaie en
remplaçant « class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > » par
std::string dans le message d'erreur. Ce qu'il ne trouve pas,
c'est std::string ()(std::string&, class C, std::string
(*)(class C)) », c-à-d ton opérateur même.
C'est ce que j'avais fais, mais je tombe plutot sur :
std::string (std::string &,class C, std::string (*)(class C))
(à moins que je louche), il manque pas le "operator()" ou "()" ?
Essaie déjà avec les corrections que j'ai proposé. Avec le
template en plus avant la définition de la fonction et la
substitution de 'n' pour std::endl, ça marche chez moi (Sun
CC 5.5 ou g++ 3.4.3). Mais je me poserais aussi des
questions vis-à-vis des const, voir même si la fonction doit
être membre.
Oui, j'essaye ça ce soir et je vous dis. L'idée de la classe
c'est de pouvoir fournir une fonction (l'opérateur ()) de
formatage de n'importe quel type (int, unsigned long, double,
etc...) en string, avec un identifiant spécial à chaque fois.
kanze@gabi-soft.fr wrote:
AG wrote:
J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
Est-ce que le premier paramètre ne doit pas être const ?
Pour tout t'avouer, j'ai décidé, dans mon processus
d'apprentissage du C++, de laisser de coté les histoires de
"const" pour l'instant. Je n'arrive pas à traiter tous les
problèmes en même temps, et j'avais l'impression que mettre le
"const" de coté au début n'était pas primordial. Mais peut
être ai-je tord.
Aussi, pourquoi cette fonction est-elle membre de la classe
? Dans l'implémentation, elle ne semble rien utiliser de la
classe.
C'est vrai. Il faudrait alors que je fasse une fonction
template plutôt qu'une classe ?
Il manque un « template< class C > » ici, pour que la
fonction suivante soit légal.
Oui, Loïc me l'a indiqué, j'ai compris maintenant.
std::string Serialize<class C>::operator ()(std::string & id,C
value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
Je ne sais pas ce que ça veut dire d'ajouter une fonction
(std::endl) à une chaîne. De toute façon, étant donné que la
fonction est un template, le compilateur ne sait pas
laquelle prendre.
Peut-être simplement "n" ?
oui, c'est ce à quoi je pensais. Je croyais que c'était la
même chose, mais en plus portable. Visiblement non.
Mais ça ne compile pas. je ne comprends pas bien le message
d'erreur :
serialize.cpp(4) : error C2511: '()' : overloaded member
function 'class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > (class
std::basic_string<cha r,struct std::char_traits<char>,class
std::allocator<char> > &,class C,class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
D'après le message d'erreur, ce n'est pas ça. Essaie en
remplaçant « class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > » par
std::string dans le message d'erreur. Ce qu'il ne trouve pas,
c'est std::string ()(std::string&, class C, std::string
(*)(class C)) », c-à-d ton opérateur même.
C'est ce que j'avais fais, mais je tombe plutot sur :
std::string (std::string &,class C, std::string (*)(class C))
(à moins que je louche), il manque pas le "operator()" ou "()" ?
Essaie déjà avec les corrections que j'ai proposé. Avec le
template en plus avant la définition de la fonction et la
substitution de 'n' pour std::endl, ça marche chez moi (Sun
CC 5.5 ou g++ 3.4.3). Mais je me poserais aussi des
questions vis-à-vis des const, voir même si la fonction doit
être membre.
Oui, j'essaye ça ce soir et je vous dis. L'idée de la classe
c'est de pouvoir fournir une fonction (l'opérateur ()) de
formatage de n'importe quel type (int, unsigned long, double,
etc...) en string, avec un identifiant spécial à chaque fois.
wrote:AG wrote:J'ai tenté ça :
#include <string>
template <class C> class Serialize
{
public:
typedef std::string CToString (C);
std::string operator() (std::string &id, C value, CToString F);
Est-ce que le premier paramètre ne doit pas être const ?
Pour tout t'avouer, j'ai décidé, dans mon processus
d'apprentissage du C++, de laisser de coté les histoires de
"const" pour l'instant. Je n'arrive pas à traiter tous les
problèmes en même temps, et j'avais l'impression que mettre le
"const" de coté au début n'était pas primordial. Mais peut
être ai-je tord.
Aussi, pourquoi cette fonction est-elle membre de la classe
? Dans l'implémentation, elle ne semble rien utiliser de la
classe.
C'est vrai. Il faudrait alors que je fasse une fonction
template plutôt qu'une classe ?
Il manque un « template< class C > » ici, pour que la
fonction suivante soit légal.
Oui, Loïc me l'a indiqué, j'ai compris maintenant.std::string Serialize<class C>::operator ()(std::string & id,C
value,
CToString F)
{
return "[" + id + "] = " + F(value) + std::endl;
Je ne sais pas ce que ça veut dire d'ajouter une fonction
(std::endl) à une chaîne. De toute façon, étant donné que la
fonction est un template, le compilateur ne sait pas
laquelle prendre.
Peut-être simplement "n" ?
oui, c'est ce à quoi je pensais. Je croyais que c'était la
même chose, mais en plus portable. Visiblement non.
Mais ça ne compile pas. je ne comprends pas bien le message
d'erreur :
serialize.cpp(4) : error C2511: '()' : overloaded member
function 'class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > (class
std::basic_string<cha r,struct std::char_traits<char>,class
std::allocator<char> > &,class C,class
std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > (__cdecl *)(class C))' not found in
'Serialize<class C>'
D'après le message d'erreur, ce n'est pas ça. Essaie en
remplaçant « class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > » par
std::string dans le message d'erreur. Ce qu'il ne trouve pas,
c'est std::string ()(std::string&, class C, std::string
(*)(class C)) », c-à-d ton opérateur même.
C'est ce que j'avais fais, mais je tombe plutot sur :
std::string (std::string &,class C, std::string (*)(class C))
(à moins que je louche), il manque pas le "operator()" ou "()" ?
Essaie déjà avec les corrections que j'ai proposé. Avec le
template en plus avant la définition de la fonction et la
substitution de 'n' pour std::endl, ça marche chez moi (Sun
CC 5.5 ou g++ 3.4.3). Mais je me poserais aussi des
questions vis-à-vis des const, voir même si la fonction doit
être membre.
Oui, j'essaye ça ce soir et je vous dis. L'idée de la classe
c'est de pouvoir fournir une fonction (l'opérateur ()) de
formatage de n'importe quel type (int, unsigned long, double,
etc...) en string, avec un identifiant spécial à chaque fois.
mais avec Visual C++ 6.0, ça me donne une erreur :
mais avec Visual C++ 6.0, ça me donne une erreur :
mais avec Visual C++ 6.0, ça me donne une erreur :