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に記載してあります。

まとめ

  • 関数の引数に auto 型が使えない
  • auto型を使用した関数が定義したいのであれば、ラムダ式を利用する

関連項目




スポンサーリンク