C++ 找不到与';标准::转换…“;

C++ 找不到与';标准::转换…“;,c++,templates,runtime,transform,lowercase,C++,Templates,Runtime,Transform,Lowercase,我有一个奇怪的错误,代码以前是运行的,但过了一段时间它就停止编译了。 错误是: Could not find a match for 'std::transform<InputIterator,OutputIterator,UnaryOperation>(char *,char *,char *,charT (*)(charT,const locale &))' in function main() 有人能帮我解释一下为什么会这样吗? 我使用的包括: #include &

我有一个奇怪的错误,代码以前是运行的,但过了一段时间它就停止编译了。 错误是:

Could not find a match for 'std::transform<InputIterator,OutputIterator,UnaryOperation>(char *,char *,char *,charT (*)(charT,const locale &))' in function main() 
有人能帮我解释一下为什么会这样吗? 我使用的包括:

#include <fstream.h>;
#include <iostream.h>;
#include <string>;
#include <time.h>;
#include <vector>;
using namespace std;
#包括;
#包括,;
#包括,;
#包括,;
#包括,;
使用名称空间std;

非常感谢

这对我很有用。也许你忘了包括

它应该这样工作:

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
   string ans;
    cin>>ans;
    std::transform(ans.begin(), ans.end(), ans.begin(), ::tolower);
   cout << ans;
   return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
字符串ans;
cin>>ans;
std::transform(ans.begin()、ans.end()、ans.begin()、::tolower);

cout如果你所说的,直到最近,这才起作用,我必须假设有人在代码的其他地方引入了一个小的改变,破坏了东西。 现在,这是可行的:

#include <string>
#include <algorithm>
#include <cctype>
#include <iterator>
#include <iostream>

int main()
{
    std::string s1 {"Hello"}, s2;
    std::transform(
            std::begin(s1),
            std::end(s1),
            std::back_inserter(s2),
            ::tolower);
    std::cout << s2 << '\n';
}
我得到一个与您类似的错误(不完全相同)。这是因为它引入了范围。 要返回“正确”版本(假设您指的是
cctype
标题中的版本),您可以使用
static\u cast
选择您想要的版本:

// ...

#include <locale>
using std::tolower;

int main()
{
    std::string s1 {"Hello"}, s2;
    std::transform(
            std::begin(s1),
            std::end(s1),
            std::back_inserter(s2),
            static_cast<int(*)(int)>(::tolower)); // Cast picks the correct fn.
    std::cout << s2 << '\n';
}
/。。。
#包括
使用std::tolower;
int main()
{
std::字符串s1{“Hello”},s2;
std::transform(
标准::开始(s1),
标准::结束(s1),
标准:背面插入器(s2),
static_cast(::tolower));//cast选择正确的fn。

std::cout@Samoth使用指针作为迭代器有什么问题?问题是
::tolower
,而不是迭代器。你不能直接传递该函数,因为它需要两个参数。请看这里:啊哈,找到了:最近有人在你的代码中添加了
#include
?你应该发布一个完整的(但最少的)函数例如,显示您使用的include,以及任何使用指令和/或声明。
等都是非标准的。使用
。确实,他应该
\include
,但错误消息表明编译器确实知道
转换的签名,因此不知何故它被提取了或者其他(我想是在一些其他
包含的
中)。我试过了,它对我很有效。也许在你的编译器上你必须包含一些其他的
来降低
#include <locale>
using std::tolower;
// ...

#include <locale>
using std::tolower;

int main()
{
    std::string s1 {"Hello"}, s2;
    std::transform(
            std::begin(s1),
            std::end(s1),
            std::back_inserter(s2),
            static_cast<int(*)(int)>(::tolower)); // Cast picks the correct fn.
    std::cout << s2 << '\n';
}