みぃちゃんの頭の中はおもちゃ箱

略してみちゃばこ。泣いたり笑ったり

非テンプレート版の関数が選択されない (C++)

2014年09月02日 22時35分31秒 | IT・デジタル
10年以上まえに つくった ふるい自作ライブラリと格闘中。

C++でのプログラミング中に あたらしい関数をかき、動作テストが完了しました。なにかと つかいまわせそうな関数なので、ライブラリに追加しましょう。まずは、つくった関数をいまのコードからライブラリ集のコードにコピーして、ライブラリ化するときの無駄が発生しないように ちょいちょいと加工。ライブラリを再構築するためのmakeファイルが用意してあるので、makeを実行するだけ。と おもったら、既存のライブラリ関数の再コンパイルが発生しました。おそらくヘッダ ファイルが更新されたためでしょう。ところが、コンパイル エラーが でてライブラリの構築が とまってしまいます。
// Library header file

istream &func( istream &istr, string &str);

template< class InIter, class OutIter>
InIter func(	InIter from,
		InIter end,
		OutIter &to);
template< class InIter, class OutIter>
InIter func(	InIter from,
		iterator_traits< InIter>::value_type endv,
		OutIter &to);
template< class InIter, class OutIter>
InIter func(	InIter from,
		InIter end,
		OutIter &to,
		char ch);
template< class InIter, class OutIter>
InIter func(	InIter from,
		iterator_traits< InIter>::value_type endv,
		OutIter &to,
		char ch);

// Where the library is used in the body file:

void accept( istream &stream)
{
	string s;
	...
	func( parstr, s);
	...
}

accept関数の func( parstr, s) で なぜかテンプレート版が選択されてコンパイル エラーに なります。テンプレート版のfuncと非テンプレート版のfuncでは ひき数の かずが あきらかに ちがうので区別されるはずです。コンパイラの問題のような気が しますが、なんとか回避しなければ。

※ この記事の本文からは漢字の訓を排除しています。

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。