我有Message
一个std::string
作为数据成员的类,定义如下:
class Message
{
// Member Variables
private:
std::string text;
(...)
// Member Functions
public:
Message(const std::string& t)
: text(t) {}
std::string getText() const {return text;}
(...)
};
这个类用在另一个类的向量中,像这样:
class Console
{
// Member Variables
private:
std::vector<Message> messageLog;
(...)
// Member Functions
public:
Console()
{
messageLog.push_back(Message("Hello World!"));
}
void draw() const;
};
在draw()
中,有一个迭代器调用getText()
. 当它发生时,程序会出现段错误。我已经确定这在构造函数中text
是有效的。Message
但是,我无法从内部判断它是否有效Console
。我假设是这样,但是如果我尝试检查Console
'messageLog 的索引,gdb 会告诉我:
(gdb) p messageLog[0]
One of the arguments you tried to pass to operator[] could not be converted to what
the function wants.
有谁知道发生了什么?
编辑:这里是draw()
. TCODConsole
是我正在使用的 curses 库的一部分,因此此函数将每条消息打印Console
到 curses 屏幕的一部分。 TL
并且BR
是Point
成员对象(两个整数),它们告诉屏幕上要绘制的位置Console
。我遗漏了原始问题的部分内容Message
,Console
希望能让事情更清楚,但如果你需要我发布整个课程,那么我可以。它们不会太长。
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);
}
}