' strcasecmp '没有在这个作用域中声明
‘strcasecmp’ was not declared in this scope
我正在尝试构建一个名为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终端中,看看它是否在那里,以及如何访问它。这可能会帮助您找到它的位置,至少假设您的代码是正确的,并且包含只是从移植或类似的东西。
相关文章:
- 未在作用域中声明unordered_map
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 未在此作用域中声明的函数和变量 (C++)
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 重载时未在 C++ 的作用域错误中声明
- 在 C++ 中使用 "transform" 会给出一个错误,指出这未在作用域中声明
- Tictactoe 游戏变量未在作用域中声明
- 当变量在多个函数作用域中使用时,我应该在类 private 中声明该变量吗?
- 如何在C++中嵌套词法作用域可访问的作用域中声明静态信息?
- gets()未在作用域中声明
- 在C++14中,在哪个作用域中声明了重新声明枚举的非范围枚举器
- C++11 外部作用域变量声明为 auto
- 未在此作用域中声明类 (c++)
- 如何声明在函数作用域中定义的结构
- 未在此作用域中声明函数,即使存在头文件也是如此
- 变量声明中结构的作用域解析是什么意思
- 在C++中,在给定的相同作用域内声明相同的变量名
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 类未在作用域中声明,但已声明该类
- 使用新的外部函数作用域声明和初始化变量