OVH Cloud OVH Cloud

Problème avec string.erase()

7 réponses
Avatar
Zouplaz
Bonjour, encore un problème dans une fonction définie comme suit :

bool GameWindow::readline(std::string &buffer)
{
// snip
int p = buffer.length();
buffer.erase(p,1); // Ou p-1 ??
// snip
}

Provoque une erreur à la compilation : trop de paramètres réels pour la
macro 'erase'

En fait j'essaie simplement de supprimer le dernier caractère de la chaine.

Comment faire ?

Merci

7 réponses

Avatar
Vincent Richard

bool GameWindow::readline(std::string &buffer)
{
// snip
int p = buffer.length();
buffer.erase(p,1); // Ou p-1 ??


buffer.erase(buffer.end() - 1);


Vincent

--
vmime, une bibliothèque C++ sous licence GPL pour parser et générer
des messages au format MIME : http://www.sourceforge.net/projects/vmime/

Avatar
Christophe de VIENNE
Zouplaz wrote:
Bonjour, encore un problème dans une fonction définie comme suit :

bool GameWindow::readline(std::string &buffer)
{
// snip
int p = buffer.length();
buffer.erase(p,1); // Ou p-1 ??
// snip
}

Provoque une erreur à la compilation : trop de paramètres réels pour la
macro 'erase'


?? *macro* 'erase' ??

Il n'y aurait pas, par hasard, une macro nommée 'erase' qui traine et
qui t'empêche d'utiliser la *fonction* std::string::erase ?


A+

Christophe

Avatar
Zouplaz
Christophe de VIENNE - :

Zouplaz wrote:
Bonjour, encore un problème dans une fonction définie comme suit :

bool GameWindow::readline(std::string &buffer)
{
// snip
int p = buffer.length();
buffer.erase(p,1); // Ou p-1 ??
// snip
}

Provoque une erreur à la compilation : trop de paramètres réels pour la
macro 'erase'


?? *macro* 'erase' ??

Il n'y aurait pas, par hasard, une macro nommée 'erase' qui traine et
qui t'empêche d'utiliser la *fonction* std::string::erase ?



Bin ça m'a surpris aussi mais alors je sais pas d'où elle peut venir (en
tout cas c'est pô moi !!)


Avatar
Michaël Monerau
Zouplaz wrote:
Il n'y aurait pas, par hasard, une macro nommée 'erase' qui traine et
qui t'empêche d'utiliser la *fonction* std::string::erase ?



Bin ça m'a surpris aussi mais alors je sais pas d'où elle peut venir
(en tout cas c'est pô moi !!)


Alors essaye un `#undef erase' avant ta fonction pour voir si c'est ça...
--
<=- Michaël "Cortex" Monerau -=>


Avatar
kanze
Zouplaz wrote in message
news:...
Christophe de VIENNE - :

Zouplaz wrote:
Bonjour, encore un problème dans une fonction définie comme suit :

bool GameWindow::readline(std::string &buffer)
{
// snip
int p = buffer.length();
buffer.erase(p,1); // Ou p-1 ??
// snip
}

Provoque une erreur à la compilation : trop de paramètres réels
pour la macro 'erase'


?? *macro* 'erase' ??

Il n'y aurait pas, par hasard, une macro nommée 'erase' qui traine
et qui t'empêche d'utiliser la *fonction* std::string::erase ?


Bin ça m'a surpris aussi mais alors je sais pas d'où elle peut venir
(en tout cas c'est pô moi !!)


Il y a un macro « erase » dans curses.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16



Avatar
tib.motuelle
Zouplaz wrote in message news:...
Christophe de VIENNE - :
?? *macro* 'erase' ??

Il n'y aurait pas, par hasard, une macro nommée 'erase' qui traine et
qui t'empêche d'utiliser la *fonction* std::string::erase ?



Bin ça m'a surpris aussi mais alors je sais pas d'où elle peut venir (en
tout cas c'est pô moi !!)


J'en connais au moins une (macro erase) qui est définie dans les entêtes de curses.
Sur ma plateforme:
#define NOMACROS
#include <curses.h>
#undef NOMACROS

...empèche la définition de cette macro (et des autres: clear, move, etc.)

Bertrand.


Avatar
Zouplaz
Bertrand Motuelle - :

J'en connais au moins une (macro erase) qui est définie dans les
entêtes de curses. Sur ma plateforme:
#define NOMACROS
#include <curses.h>
#undef NOMACROS

...empèche la définition de cette macro (et des autres: clear, move,
etc.)



Toi et James avez tapé dans le mille. J'utilise pdcurses !

Je vais tester avec les directives ci dessus, merci