clang++のエラー error: 'auto' not allowed in function prototype
提供: C++入門
2015年11月7日 (土) 18:05時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「関数の引数で auto型を使おうとしたらエラーが起きたときの話です。clang++で「error: 'auto' not allowed in function prototype」とい...」)
スポンサーリンク
関数の引数で auto型を使おうとしたらエラーが起きたときの話です。clang++で「error: 'auto' not allowed in function prototype」というエラーに遭遇しました。同じエラーに遭遇しているのだとしたら、ラムダ式で解決できます。このドキュメントを読むのに、2分程度の時間が必要です。
読み方
- auto
- おーと
概要
自分で定義する関数の引数に auto型を使用としたときに、clang++が以下のコンパイルエラーを出しました。
$ clang++ std_replace1.cpp std_replace1.cpp:14:6: error: 'auto' not allowed in function prototype
対策としては、ラムダ式 を使うことです。
詳細
はじめは、dump()は、ラムダ式ではなく、普通の関数として、定義していました。
void dump(auto a) { for (auto i: a) { std::cout << i << " "; } std::cout << std::endl; }
しかし、auto型を関数の引数に指定したら、コンパイルできませんでした。ラムダ式に置き換えることで、問題はなくなりました。
auto dump = [](auto a) { for(auto i:a) { std::cout<<i<<" "; } std::cout<<std::endl; };
エラーの詳細は、以下の通りです。 エラーでは、「autoは、関数プロトタイプでの使用は許していない」と出ています。
$ clang++36 --std=c++14 std_replace1.cpp std_replace1.cpp:14:6: error: 'auto' not allowed in function prototype dump(auto a) { ^~~~ std_replace1.cpp:28:2: error: no matching function for call to 'dump' dump(a1); ^~~~ std_replace1.cpp:14:1: note: candidate function not viable: no known conversion from 'std::array<int, 5>' to 'int' for 1st argument dump(auto a) { ^ std_replace1.cpp:29:2: error: no matching function for call to 'dump' dump(a2); ^~~~ std_replace1.cpp:14:1: note: candidate function not viable: no known conversion from 'std::array<int, 5>' to 'int' for 1st argument dump(auto a) { ^ 3 errors generated.
ここで利用しているプログラムの全体は、std::replaceに記載してあります。
まとめ
関連項目
ツイート
スポンサーリンク