2010-04-03 53 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