У меня проблемы с пониманием, почему следующий код не делает то, что должен, 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.
теперь во время выполнения, скажем, «name» - это «Player:», а «jmsg-> Text» - «Hello World», я ожидаю, что текст после кода будетбыть "Player: Hello World", но это не так.Это всего лишь «Player:», и я не понимаю, почему.
Я нашел обходной путь:
jmsg->Text = name.c_str() + jmsg->Text;
с этим изменением это «Player: Hello World».
Проблема в том, что я до сих пор не понимаю, почему первый не работает.Может кто-нибудь объяснить, где проблема?Это специфично для VS или чего-то другого?
, чтобы было ясно: это из проекта с открытым исходным кодом, который я хочу использовать, а не код, который я написал сам, но проблема была источником многих ошибок, так какиспользуется таким образом много.
edit Класс 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);
};