2012-01-12 10 views
2

C++には、お互いに過負荷をかける関数が最大数ありますか?関数のオーバーロードの最大数は?

「一致する機能がありません」というエラーが発生しました。私はオーバーレイされたencode関数を持っています(配列/ベクトルのテンプレートを含む)私はエンコードしている各構造体/値型の約900の異なるバージョンです。エンコード関数は、エンコードする必要があるフィールドに応じて互いに呼び出します。

ファイルの末尾に自分のencode(std::string)関数を置くと、その呼び出しは "no matching function"を返します。それがトップの近くにあるなら、それはしません。

何が起こっているのか、もっと重要なのはどうすればいいですか?

(Linuxのgccのバージョン4.6.1)

+0

900オーバーロード – ronag

+6

あなたは900の過負荷を持っていますか? ?? ?????私は適切に過負荷をグループ化することから始めます。通常、ほとんどのコンパイラはバージョンオプションをサポートしています...コンパイラのマニュアルを読んでください。 – Nim

+0

なぜ900の過負荷が多いのですか? 'stream operator <<(stream、smtn_other)'のオーバーロードはどうですか? – Lol4t0

答えて

3

あなたは機能を置く場所に基づいて表示されると消えてエラーのあなたの記述によっては、これは、オーバーロードの数とは関係ありません。むしろ、問題は宣言される前にオーバーロードを呼び出そうとしていることです。

あなたは(関係なく、彼らが過負荷であるか、明確な名前を持っているかどうかの)記述するように、すべてのお互いを呼び出す関数の束を持っているとき、あなたは一般的に最初のすべての機能を宣言して、すべての定義の後に、後でそれらを定義する必要がありますされている。通常、宣言はすべてヘッダファイル(他のファイルとそのファイルを含む)にあり、定義はすべてソースファイル(ヘッダを含む)にありますので、これらはすべて簡単に動作します。インライン関数(すべてのコンパイル単位でインライン化されるためにヘッダファイルで定義する必要がある)を持っていれば、より複雑になりますが、全体のパターンは同じです。まずすべてを宣言し、すべてを定義します。

編集まさにあなたが「いいえ一致過負荷」というエラーを取得している

? - エンコード関数の宣言後にそのエラーが発生している呼び出しを含むDEFINITIONを移動する必要があります(または、エラーのあるDEFINITIONの前にエンコード宣言を移動する必要があります)。 ALL DECLARATIONSがALL DEFINITIONSの前にある限り、注文はOKです。

+0

私は私のケースに適用されるとは思わないので、すべての関数の宣言とテンプレートをソースファイルのヘッダーと関数の定義に入れました。私が「ファイルの最下部にある関数」と言ったとき、宣言をヘッダーの最後に、定義をソースの最後に移動することを指していました。 – Annan

+0

あなたは正しかった!私はどういうわけか、ヘッダファイルに入っているので、別の定義を必要としないテンプレートを考えていました。私はすべてのテンプレート定義をヘッダーの先頭に付け、その定義を下に移動してすべてが機能します! :) – Annan

関連する問題