'strcasecmp'未在此范围内声明

时间:2011-08-30 19:12:28

标签: c++

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

我有很多这样的错误:

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

我该怎么办,代码中有太多的cpp文件会产生类似的错误。 我不认为我可以测试写入包含string.h到每个提供错误的cpp文件,问题可能与我的编译器有关吗?

我在Ubuntu,GCC是4.5。

我的sw配置高于lipitk需求,正如我在手册中所读到的那样。

4 个答案:

答案 0 :(得分:10)

我认为它可能在做

#include <string>

如果将错误更改为

,则应修复错误
#include <strings.h>

答案 1 :(得分:9)

我猜这里。 “strcasecmp”不是标准库函数,但是,它的名称遵循库函数的惯例,所以我想lipiTk最初是使用一些编译器编写的,它为它的运行时库添加了一堆非标准扩展(并声明了)它们在标准头文件中)

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

#define strcasecmp _stricmp

答案 2 :(得分:5)

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

假设您的系统符合POSIX或BSD,则必须包含正确的标题:

#include <strings.h>

答案 3 :(得分:0)

你需要包含该范围内可用函数的文件 - 世界上你如何获得如此多的代码而没有正确的包含(如果你不能把它放进去,我会假设很多每个文件一次。)

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

man strcasecmp

进入bash终端,查看它是否存在以及如何访问它。这可能会帮助您找到它至少假设您的代码是正确的,并且包含仅仅是移植或类似的东西。