0

我在 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 容器(例如 vector)时没有遇到任何问题。有没有人对这种情况有任何建议或见解。谢谢。

4

2 回答 2

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()。

于 2009-11-23T19:47:29.273 回答
0

这很好地解释了它。

这将归结为以下代码:

std::transform(temp.begin(),temp.end(),temp.begin(),static_cast<int (*)(int)>(std::toupper));
于 2009-08-29T04:01:16.707 回答