gpt4 book ai didi

c++ - 尝试访问类的字符串成员时出现段错误

转载 作者:太空狗 更新时间:2023-10-29 23:20:12 26 4
gpt4 key购买 nike

我有一个类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;}
(...)
};

这个类在另一个类的 vector 中使用,像这样:

class Console
{
// Member Variables
private:
std::vector<Message> messageLog;
(...)

// Member Functions
public:
Console()
{
messageLog.push_back(Message("Hello World!"));
}

void draw() const;
};

draw() , 有一个迭代器调用 getText() .当它发生时,程序会出现段错误。我确定 textMessage 内有效构造函数。但是,我无法从内部判断它是否有效 Console .我假设它是,但如果我尝试检查 Console 的索引的消息日志,gdb 告诉我这个:

(gdb) p messageLog[0]<br/>
One of the arguments you tried to pass to operator[] could not be converted to what
the function wants.

有人知道这是怎么回事吗?

编辑:这里是 draw() . TCODConsole是我正在使用的 curses 库的一部分,因此此函数打印 Console 中的每条消息到诅咒屏幕的一部分。 TLBRPoint成员对象(两个整数)指示在屏幕上的何处绘制 Console .我遗漏了 Message 的部分内容和 Console在最初的问题中希望让事情更清楚,但如果你需要我发布整个类(class),那么我可以。它们不会太长。

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);
}
}

最佳答案

我的猜测是,当您使用 it->getText() 时,迭代器为 NULL。在遍历数组时和调用 it->getText() 之前添加检查 it != messageLog.end()

关于c++ - 尝试访问类的字符串成员时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com