2010-04-03 54 views
1

我想有這樣的聲明:如何提供默認參數作爲此對象?

void Date::get_days_name(const Date& = this) 

,我會明白,如果沒有參數提供使用該對象作爲參數。出於某種原因,在VS我收到錯誤消息:

「錯誤1錯誤C2355:‘這個’:只能在非靜態成員的內部參考」

任何想法,我做錯了?

+0

您正在編寫非法的C++代碼 - 您不能在該上下文中使用this。你應該將參數列表看作是在課程的「外部」。 – 2010-04-03 15:59:28

+0

代碼中沒有足夠的上下文。 get_days_name()是一個成員函數嗎?你是否試圖使用保留字「this」作爲參數名稱? – msw 2010-04-03 16:00:15

+0

@Neil我怎樣才能達到類似的效果? – 2010-04-03 16:00:38

回答

5

你可以使重載函數:

void get_days_name(const Date&) const; 
void get_days_name() const { 
    get_days_name(*this); 
} 

(順便說一句,this是一個指針,而不是一個參考。)

1

我喜歡肯尼的answer,但如果你願意的參數從改變參考指針,你可以用一個函數來完成它:

void Date::get_days_name(const Date* value_ = NULL) const 
{ 
    const Data* value = 
    value_ != NULL ? 
    value_ : 
    this; 
    // the rest of the code operates on value. 
} 

使用指針更清晰地傳達了value_也是一個可選參數。

但是,如果get_days_name可以自由地在任何Date上運行,應該可以是static

+0

是的,不錯的選擇。 – 2010-04-03 16:19:16