2009-05-31 3 views
5

Aのプロトタイプと機能を持っている:デフォルト値を持つパラメータを持つ関数のプロトタイプを作成するにはどうすればよいですか?

void arryprnt(int[], string, int, string, string); 

の定義:

void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".") { 
// stuff 
} 

そして、私はこのようにそれを呼んでいる:とき...

arryprnt(jimmy, "PSEUDOJIMMY: ", 15); 

私はarryprntを呼び出して、プロトタイプの説明に基づいて、引数があまり使われていないというコンパイラエラーが発生します。 「わかりました、私は考えています。「コンパイラは、arryprntのパラメータのいくつかにデフォルト値があることを知らないので、定義からプロトタイプにパラメータをコピーするだけです。しかし、私は、私は、と多くの引数でarryprntを呼んでいたと私に言っているコンパイラのエラーがありました!私はすべての引数を明示的に指定することができますが、すべての引数を指定せずに呼び出す方法はありますか?

答えて

20

あなたは試作品ではなく、このような定義でデフォルト引数を置く必要があります。

void arryprnt(int[] a, string intro, int len, string sep=", ", string end="."); 

およびそれらなしで定義しますところで

void arryprnt(int[] a, string intro, int len, string sep, string end) { 
    // ... 
} 

:別のノートに。 intより大きいオブジェクトをconst参照で渡すことは良い方法です。これはすべての状況には適切ではありませんが、ほとんどの場合適切であり、不必要に物をコピーすることを避けます。例:

void func(const std::string &s) { 
    // do some read-only operation with s. 
} 

func("hello world"); 
+0

うーん...どういうわけか、うまくいきませんでした。私は "引数が多すぎます"というエラーが出ています。 – Xonara

+2

それは動作しない場合、あなたは何か間違っている。私はその問題の原因がわからないが、これは正しい方法だ。 –

関連する問題