' strcasecmp '没有在这个作用域中声明

‘strcasecmp’ was not declared in this scope

本文关键字:作用域 声明 strcasecmp      更新时间:2023-10-16

我正在尝试构建一个名为lipiTk的源代码

我有很多这样的错误:

Documents/lipi/lipi/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp:1222:78: 
 error: ‘strcasecmp’ was not declared in this scope

我该怎么办,代码中有太多的cpp文件会给出类似的错误。我不认为我可以测试写包括字符串。h到每个cpp文件,给出错误,问题可能是关于我的编译器?

我在Ubuntu上,GCC是4.5。

我的sw配置高于我在手册中读到的lipitk需求

我想它可能在做

#include <string>

如果您将其更改为

,则错误将被修复。
#include <strings.h>

我来猜一下。"strcasecmp"不是一个标准的库函数,然而,它的名字遵循库函数的约定,所以我认为lipiTk最初是使用一些编译器编写的,这些编译器在它的运行时库中添加了一堆非标准扩展(并在标准头文件中声明它们)

所以,我猜问题是你的编译器有一个不同的库扩展集——或者可能是类似的不同名称的库扩展集——谷歌告诉我"strcasecmp"做一个不区分大小写的字符串比较,许多编译器称之为"stricmp"或"strcmpi"或"_stricmp"。找出编译器使用的名称,然后在源文件的顶部添加一个#define:

#define strcasecmp _stricmp

正如我在前面的注释中提到的,strcasecmp不在C或c++标准中。但是,它是由POSIX.1-2001和4.4BSD定义的。

假设您的系统是POSIX或BSD兼容的,您必须包含正确的头文件:

#include <strings.h>

您需要在作用域中包含函数可用的文件-如果没有正确的包含在其中,您如何获得如此多的代码(如果您不能将其放入每个文件一次,我假设它很多)。

PS:你确定你的ubuntu版本在string.h中有这个功能吗?类型:

man strcasecmp

放到一个bash终端中,看看它是否在那里,以及如何访问它。这可能会帮助您找到它的位置,至少假设您的代码是正确的,并且包含只是从移植或类似的东西。