2009-05-31 77 views
5

一個有原型的功能:如何使用具有默認值的參數製作函數的原型?

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) { 
    // ... 
} 

BTW:另一個音符。通過const參考傳遞大於int的對象被認爲是一種好的做法。雖然這不適用於全部的情況,但它適用於大多數情況,並避免不必要的複製。例如:

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

func("hello world"); 
+0

嗯......不知何故,這沒有奏效。我收到「太多爭論」的錯誤。 – Xonara 2009-05-31 03:59:53