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

structメインの外側を宣言する必要があります。説明については、この質問を参照してください。

于 2012-08-13T06:43:53.650 に答える