J'ai une classe Message
qui a un std::string
en tant que membre de données, défini comme suit :
class Message
{
// Member Variables
private:
std::string text;
(...)
// Member Functions
public:
Message(const std::string& t)
: text(t) {}
std::string getText() const {return text;}
(...)
};
Cette classe est utilisée dans un vecteur d'une autre classe, comme ceci :
class Console
{
// Member Variables
private:
std::vector<Message> messageLog;
(...)
// Member Functions
public:
Console()
{
messageLog.push_back(Message("Hello World!"));
}
void draw() const;
};
En draw()
, il y a un itérateur qui appelle getText()
. Si c'est le cas, le programme s'arrête. J'ai déterminé que text
est valide à l'intérieur du Message
constructeur. Cependant, je ne peux pas dire s'il est valide à l'intérieur de Console
. Je suppose que c'est le cas, mais si j'essaie d'inspecter les indices de Console
dans le messageLog, gdb me dit ceci :
(gdb) p messageLog[0] One of the arguments you tried to pass to operator[] could not be converted to what the function wants.
Quelqu'un sait-il ce qui se passe ?
EDIT : voici draw()
. TCODConsole
fait partie d'une bibliothèque curses que j'utilise, et donc cette fonction imprime chaque message dans Console
à une partie de l'écran des malédictions. TL
y BR
sont Point
des objets membres (deux ints) qui indiquent où dessiner sur l'écran Console
. J'ai laissé de côté certaines parties de Message
y Console
dans la question originale afin de rendre les choses plus claires, mais si vous avez besoin que je poste les classes entières, je peux le faire. Ils ne sont pas trop longs.
void Console::draw() const
{
int x = TL.getX(), y = TL.getY();
int width = BR.getX() - TL.getX();
int height = BR.getY() - TL.getY();
// draw the Console frame
TCODConsole::root->printFrame(x, y, width, height, true);
// print the Console's messages
vector<Message>::const_iterator it;
for(it=messageLog.begin(); it<messageLog.begin()+height-1; ++it)
{
string message = "%c" + it->getText();
TCODConsole::setColorControl(TCOD_COLCTRL_1,
it->getForeColor(),
it->getBackColor());
y += TCODConsole::root->printRectEx(x, y, width, height,
TCOD_BKGND_NONE,
TCOD_LEFT,
message.c_str(),
TCOD_COLCTRL_1);
}
}