掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
関数オブジェクトと関数ポインタを区別なく扱いたい (ID:66738)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
エラーメッセージを見れば原因は一目瞭然だと思うのだが要解説かな? この例では int even[] 配列に対して、その配列名 even を使っている。 が、暗黙の変換「配列名→最初の要素へのポインタ」は常になされるわけではない。 この例 foo(even,even+4,iseven); の第一引数は、変換されない場合に該当。 すると foo の第一引数は int[4] 型、第二引数は int* 型。 そんな template は定義されていない、というエラーなわけだ。 foo(even+0, even+4, iseven); や foo(&even[0], &even[4], iseven); (1) はこれでうまくコンパイルできるので試してみるべし。 (2)(3) は iseven2 の定義がまずいのでコンパイルできない。 iseven2 は std::unary_function<int,bool> から派生させる必要がある。 (2) は先の配列名との複合技なので両方直す必要があるよ
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.