【问题标题】:Why identifier 'strlen' is undefined?为什么标识符'strlen'未定义?
【发布时间】:2020-03-20 19:52:16
【问题描述】:

我正在用 C++ 编写程序。当我使用strlen 函数时,它带有一条红线下划线。尽管该项目的构建没有错误。这就是我使用此功能的方式。 (顺便说一下,strcpy 也加了下划线)。

Exception::Exception(int _Line, char* _File, char* _Func, char* _Desc)
{
  Line = _Line;
  int size = strlen(_File) + 1;
  File = new char[size];
  strcpy(File, _File);
  Func = new char[size];
  strcpy(Func, _Func);
  Desc = new char[size];
  strcpy(Desc, _Desc);
}

我在文件开头声明了<cstring> 库。请告诉我如何解决这个问题?

【问题讨论】:

  • 你检查你的IDE的编辑器设置了吗?
  • 我认为您必须提供minimal reproducible example 以及错误消息的确切文本。
  • _Line_File_Func_Desc 是为语言实现保留的标识符。通过在您自己的程序中定义它们,您的程序将具有未定义的行为。为您的变量使用其他名称。
  • 当我使用 strlen 函数时,它带有一条红线。虽然项目构建没有错误。 Intellisense 并不完美。它可能有误报。一定是您项目的某些特定因素导致 Intellisense 以这种方式失败。
  • 这很难回答,因为您没有以minimal reproducible example 的形式提供完整的信息。您声称您拥有#include <cstring>,但显示的代码并未证明这一点。您之前的代码中可能还缺少其他内容,但是 - 由于您没有显示任何后续代码 - 没有人能猜到您可能遗漏了什么,或者它如何与 Intellisense 交互。一种可能性是您的 IDE 也很混乱,因此 (1) 执行“构建干净”和 (2) 从头开始​​重建项目。如果失败,请在#include <cstring> 之后添加using namespace std,然后再次清理并重建。

标签: c++ visual-studio-2017 string-function


【解决方案1】:

在 VS 编辑器中为代码添加下划线的系统称为 IntelliSense,它使用的代码与编译器本身不同(或者至少几年前我上次使用它时没有使用相同的代码)。有时会感到困惑。

改用std::strlen,重新组织代码、包含或其他内容。

【讨论】:

  • 我试过了。他写道,命名空间“std”没有成员“strlen”
  • 这些感觉更像是评论而不是答案。
【解决方案2】:

正如您在 documentation for strlen() 中所读到的,strlen()string.h 中定义,而 C++ 对应的 std::strlen()cstring 中定义。

因此,要消除错误曲线,请尝试添加上述标题之一。

#include <cstring>
...
std::strlen()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    相关资源
    最近更新 更多