使用STL的std ::问题从变换的cygwin克++(problems using STL std

2019-10-17 10:30发布

我在Cygwin上运行的G ++(gcc版本3.4.4)。

我不能得到的该小代码段进行编译。 我包括相应的头。

int main(){

    std::string temp("asgfsgfafgwwffw");

    std::transform(temp.begin(),
                   temp.end(),
                   temp.begin(),
                   std::toupper);

    std::cout << "result:" << temp << std::endl;

    return 0;
}

我还没有使用STL容器,如向量的任何问题。 没有人有任何建议或见解这种情况。 谢谢。

Answer 1:

这说明它非常好。

这将归结为以下代码:

std::transform(temp.begin(),temp.end(),temp.begin(),static_cast<int (*)(int)>(std::toupper));


Answer 2:

从上面的链接 。

 #include <cctype> // for toupper #include <string> #include <algorithm> using namespace std; void main() { string s="hello"; transform(s.begin(), s.end(), s.begin(), toupper); } 

可惜的是,上面的程序将无法编译,因为名称“TOUPPER”不明确。 它可以指到:

 int std::toupper(int); // from <cctype> 

要么

 template <class chart> charT std::toupper(charT, const locale&);// from <locale> 

使用显式类型转换来解决歧义:

 std::transform(s.begin(), s.end(), s.begin(), (int(*)(int)) toupper); 

这将指示编译器来选择合适的TOUPPER()。



文章来源: problems using STL std::transform from cygwin g++