我很难理解以下代码为何不执行应做的工作,VS2017未显示错误并创建了解决方案,但字符串永远都不应该是这样:
void COrion::AddJournalMessage(CTextData *msg, const string &name)
{
WISPFUN_DEBUG("c194_f101");
CTextData *jmsg = new CTextData(msg);
jmsg->Text = name + jmsg->Text;
}
jmsg->文本为std :: string。
现在在运行时,我们说“名称”是“ Player:”,“ jmsg-> Text”是“ Hello World”,我希望代码后的文本是“ Player:Hello World”,但不是。只是“玩家:”而我不明白为什么。
我找到了一种解决方法:
jmsg->Text = name.c_str() + jmsg->Text;
此更改为“ Player:Hello World”。
问题是,我仍然不明白为什么第一个不起作用。 有人可以解释问题出在哪里吗? 是VS特有的吗?
清楚地说:这是我想使用的开源项目,而不是我自己编写的代码,但是问题是许多bug的根源,因为大量使用了这种方法。
编辑 CTextData类:
class CTextData : public CRenderTextObject
{
public:
bool Unicode = false;
TEXT_TYPE Type = TT_CLIENT;
uchar Font = 0;
uint Timer = 0;
uint MoveTimer = 0;
string Text = "";
wstring UnicodeText = L"";
uchar Alpha = 0xFF;
CRenderWorldObject *Owner = NULL;
CTextData();
CTextData(CTextData *obj);
virtual ~CTextData();
virtual bool IsText() { return true; }
bool CanBeDrawedInJournalGump();
CGLTextTexture m_Texture;
void GenerateTexture(
int maxWidth,
ushort flags = 0,
TEXT_ALIGN_TYPE align = TS_LEFT,
uchar cell = 30,
int font = -1);
};