我正在写一个使用SMTP的小应用程序。
我有一个奇怪的错误:
identifier "Luservar" is undefined`
码:o_smtp->BodyText = _T(uservar->get_h().c_str() + ":" + pass_str.c_str() + "\n" + get_mac().c_str());
如果我说Luservar
,为什么会说uservar
?我努力了:
o_smtp->BodyText = uservar->get_h().c_str() + ":" + pass_str.c_str() + "\n" + get_mac().c_str();
但是然后我得到这样的错误:expression must have integral or unscoped enum type
我是C++的新手,也许它是合并字符串的错误方法? 最佳答案
_T
或TEXT()
。耶哥Windows.h
中删除它们(它们本应该在几十年前删除它们)。_T
exists! #define UNICODE
is enabled in your project properties and forget about the past。 std::string
,则除非确实需要,否则不应该使用.c_str()
-在这种情况下,您不必(至少,不是为了进行字符串连接)。 至于你的代码...
std::string
:uservar->get_h()
pass_str
get_mac()
o_smtp->BodyText
键入为char*
。 std::string
为您完成串联! std::string bodyText = uservar->get_h() + ":" + pass_str + "\n" + get_mac();
o_smtp->BodyText = bodyText.c_str();
但是,对于,您需要注意std::string bodyText
的生存期-一旦bodyText
离开范围,其c_str
就会过期。看到这个线程:What is std::string::c_str() lifetime?请记住,
bodyText.c_str()
提供了char*
的bodyText
View (即,它是同一块内存的不同表示),而不是clone或bodyText
的副本,因此,如果o_smtp->BodyText
是长寿的,那么您需要确保bodyText
与o_smtp
具有相同的生存期,或者将bodyText
的字符缓冲区复制到寿命足够长的单独缓冲区中,或者确定o_smtp
是否将获得其BodyText
字符缓冲区的所有权。