Dans une classe templatée (générique ?), j'ai défini une structure basée
sur le type paramétré, et un vecteur de cette structure.
Le problème est que je n'arrive pas à définir un itérateur pour le
parcourir :
bool handle(const std::string& cmd)
{
using namespace std;
for (vector<cmd_t>::iterator i = mCmds.begin(); i != mCmds.end(); ++i)
if (cmd == (i->cmd) || cmd == string(1, i->shortcut))
return (this->*(i->func_ptr))();
return false;
}
// D'autres choses, dont help() du même genre
};
<<<<<
À la compilation, celà donne ça :
g++ -O2 -g3 -Wall -I. -c -o shell.o shell.cpp
./shell.hh: In member function 'bool Shell<T>::handle(const std::string&)':
./shell.hh:30: error: expected `;' before 'i'
./shell.hh:30: error: 'i' was not declared in this scope
./shell.hh: In member function 'void Shell<T>::help()':
./shell.hh:39: error: expected `;' before 'i'
./shell.hh:39: error: 'i' was not declared in this scope
make: *** [shell.o] Erreur 1
De quelle manière m'y prends-je mal ?
(Notez que mon interface n'est pas stabilisée, alors si vous voyez une
manière plus "élégante" de faire que des pointeurs sur fonction, je suis
ouvert à toute proposition ;))
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Gabriel Dos Reis
Bastien Durel writes:
| Bonjour, | | Dans une classe templatée (générique ?), j'ai défini une structure basée | sur le type paramétré, et un vecteur de cette structure. | Le problème est que je n'arrive pas à définir un itérateur pour le | parcourir : | | Code >>>>> | template <class T> | class Shell | { | typedef struct | { | std::string cmd; | char shortcut; | bool (T::*func_ptr)(void); | } cmd_t; | | std::vector<cmd_t> mCmds; | | bool handle(const std::string& cmd) | { | using namespace std; | for (vector<cmd_t>::iterator i = mCmds.begin(); i != mCmds.end(); ++i) ^^^^^^^^^^^^^^^^^^^^^^^^^^
typename vector<cmd_t>::iterator i = mCmds.begin();
Normalement, tu devrais introduire des typedef pour abbrévier tout ça.
-- Gaby
Bastien Durel <bastien.durel@data.fr> writes:
| Bonjour,
|
| Dans une classe templatée (générique ?), j'ai défini une structure basée
| sur le type paramétré, et un vecteur de cette structure.
| Le problème est que je n'arrive pas à définir un itérateur pour le
| parcourir :
|
| Code >>>>>
| template <class T>
| class Shell
| {
| typedef struct
| {
| std::string cmd;
| char shortcut;
| bool (T::*func_ptr)(void);
| } cmd_t;
|
| std::vector<cmd_t> mCmds;
|
| bool handle(const std::string& cmd)
| {
| using namespace std;
| for (vector<cmd_t>::iterator i = mCmds.begin(); i != mCmds.end(); ++i)
^^^^^^^^^^^^^^^^^^^^^^^^^^
typename vector<cmd_t>::iterator i = mCmds.begin();
Normalement, tu devrais introduire des typedef pour abbrévier tout ça.
| Bonjour, | | Dans une classe templatée (générique ?), j'ai défini une structure basée | sur le type paramétré, et un vecteur de cette structure. | Le problème est que je n'arrive pas à définir un itérateur pour le | parcourir : | | Code >>>>> | template <class T> | class Shell | { | typedef struct | { | std::string cmd; | char shortcut; | bool (T::*func_ptr)(void); | } cmd_t; | | std::vector<cmd_t> mCmds; | | bool handle(const std::string& cmd) | { | using namespace std; | for (vector<cmd_t>::iterator i = mCmds.begin(); i != mCmds.end(); ++i) ^^^^^^^^^^^^^^^^^^^^^^^^^^
typename vector<cmd_t>::iterator i = mCmds.begin();
Normalement, tu devrais introduire des typedef pour abbrévier tout ça.
-- Gaby
Bastien Durel
Bastien Durel writes: | for (vector<cmd_t>::iterator i = mCmds.begin(); i != mCmds.end(); ++i) ^^^^^^^^^^^^^^^^^^^^^^^^^^
typename vector<cmd_t>::iterator i = mCmds.begin();
Merci :)
Normalement, tu devrais introduire des typedef pour abbrévier tout ça.
Oui, ça devient urgent.
-- Bastien Durel.
Bastien Durel <bastien.durel@data.fr> writes:
| for (vector<cmd_t>::iterator i = mCmds.begin(); i != mCmds.end(); ++i)
^^^^^^^^^^^^^^^^^^^^^^^^^^
typename vector<cmd_t>::iterator i = mCmds.begin();
Merci :)
Normalement, tu devrais introduire des typedef pour abbrévier tout ça.