BodyText = _T(user-6ren">
gpt4 book ai didi

C++ 标识符 "Luservar"未定义

转载 作者:行者123 更新时间:2023-12-01 14:42:30 25 4
gpt4 key购买 nike

我正在编写一个使用 SMTP 的小应用。

我得到了一个奇怪的错误:

identifier "Luservar" is undefined`

代码:

o_smtp->BodyText = _T(uservar->get_h().c_str() + ":" + pass_str.c_str() + "\n" + get_mac().c_str());

如果我说 uservar 为什么会说 Luservar

我试过:

o_smtp->BodyText = uservar->get_h().c_str() + ":" + pass_str.c_str() + "\n" + get_mac().c_str();

但是我得到这样的错误:表达式必须具有整型或无作用域的枚举类型

我是 C++ 的新手,也许它合并字符串的方式不对?

最佳答案

  • 请勿使用 _TTEXT()。天哪。
  • 如果您正在编写 C++(使用类和对象,并使用来自 STL 和 C++ 标准库的类型),那么您不应该编写 C(通过使用类型定义、结构和原始指针)。
    • 请记住,C++ 和 C 是不同的语言,尽管它们的句法相似且 C++ 继承了 C。
    • 有趣的事实:Microsoft 的 VisualC++ 不是 C 编译器 - 它只支持编译 C++ 所需的 C 部分:Does Visual Studio 2017 fully support C99?
    • 我的意思是如果你正在使用 std::string 那么你不应该使用 .c_str() 除非你真的必须 - 而且在在这种情况下,您不必这样做(好吧,至少对于字符串连接不是这样)。

至于你的代码...

  • 我假设这些变量和函数返回值的类型为 std::string:
    • uservar->get_h()
    • pass_str
    • get_mac()
  • 我假设 o_smtp->BodyText 的类型是 char*
  • 我假设您只是想将这些字符串连同 C++ 代码中的文字连接在一起。
    • 在这种情况下,让 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() 提供了 bodyTextchar* view(即它是一个不同的同一内存块的表示),而不是克隆或 bodyText 的拷贝,因此如果 o_smtp->BodyText 是长生命周期的,那么您将需要确保 bodyTexto_smtp 具有相同的生命周期,或者将 bodyText 的字符缓冲区复制到一个单独的缓冲区,该缓冲区的生命周期足够长 - 或者确定是否 o_smtp 将取得其 BodyText 字符缓冲区的所有权。

关于C++ 标识符 "Luservar"未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62771341/

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