为什么"std::isdigit"在 Windows 上报告C++"no matching overloaded function"
Why does "std::isdigit" report "no matching overloaded function" in C++ on Windows
我实现了这个问题的公认答案,它使用std::isdigit
:
#include <string>
#include <ctype.h>
using namespace std;
bool is_number(const std::string& s)
{
std::string::const_iterator it = s.begin();
while (it != s.end() && std::isdigit(*it)) ++it;
return !s.empty() && it == s.end();
}
它在Mac OS X上运行良好。然而,当在VS17 Professional 15.9.3 for Windows 10中使用MSVC时,我会收到以下编译器错误:
C2672 'std::isdigit': no matching overloaded function found.
我正在移植代码,并且知道这适用于MacOSX和clang。我已经包含了<string>
、<cctype>
、<ctype.h>
和<stdlib.h>
,没有任何帮助。
这对我来说毫无意义。
isdigit()
在C标头ctype.h
或C++标头cctype
中定义。
如果您在C++文件中包含ctype.h
,那么isdigit()
是在全局命名空间中定义的(有些实现也放在std::中(。
相反,如果从C++文件中包含cctype
,则isdigit()
定义在标准名称空间std::
中(某些实现也位于全局名称空间中(。
在您的案例中,您有#included <ctype.h>
,在windows上,这似乎意味着它只在全局命名空间中可用。因此CCD_ 15不匹配任何已知的函数。尝试将include更改为#include <cctype>
。
#include <cctype>
bool is_number(const std::string& s)
{
std::string::const_iterator it = s.begin();
while (it != s.end() && std::isdigit(*it)) ++it;
return !s.empty() && it == s.end();
}
事实证明,这是一个类似的问题。使用std名称空间(即using namespace std;
(时会有一些歧义。如果您将代码中的std::isdigit
更改为isdigit
,它将在Windows上编译。
#include <string>
#include <ctype.h>
using namespace std;
bool is_number(const std::string& s)
{
std::string::const_iterator it = s.begin();
while (it != s.end() && isdigit(*it)) ++it;
return !s.empty() && it == s.end();
}
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- c++20[[no.unique_address]]中的新功能是什么
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- "no matching function for call to 'Vector::Vector'"错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 处理"no operator found"
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 如何解决"no Qt platform plugin could be initialized"问题?
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- 为什么当我在 std::string 中打开文件名的 fstream 时出现"no matching function"错误?
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- do while 循环中的 if 语句以 yes 或 no 结尾
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- 错误消息:使用"string* +="后"no match for 'operator+='"
- Eulers 项目问题 no 345 听不懂几行代码
- "No-Const Pointer to Const "调用功能
- 如何在 c++ 中将 s1 和 s2 与 no if 语句进行比较
- "No such file or directory" C++标头问题
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息