1

使用mingw32-g++编译时,出现错误:没有匹配函数调用'for_each(int [9], int*, main()::Output)',但是在vs2005中可以做的很好吗?

#include <iostream>
#include <algorithm>

int main() {

  struct Output {
      void  operator () (int v) {
           std::cout << v << std::endl; 
       }
  };

  int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  std::for_each(a, a + sizeof(a)/sizeof(a[0]), Output());

  return 0;
}
4

2 回答 2

5

在 C++11 之前的版本中,用作模板参数的语言类型必须具有链接。C++ 中的局部类声明没有链接,这就是为什么它们不能用作 C++98/C++03 中的模板参数的原因。在这些版本的语言中,您必须在命名空间范围内声明您的类。

在 C++11 中删除了链接要求。从 C++11 的角度来看,您的代码是有效的。显然,您正在 C++11 之前的模式下编译。

于 2012-08-13T06:44:56.217 回答
3

您必须声明structmain 的外部。请参阅此问题以获取解释。

于 2012-08-13T06:43:53.650 回答