2010-04-03 4 views
1

Je voudrais avoir la déclaration comme ceci:Comment fournir un argument par défaut en tant que cet objet?

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

que je comprendrais que si aucun argument est fourni utilisé cet objet comme argument. Pour quelque raison VS je me fais Message d'erreur:

« erreur ERROR 1 C2355: « ceci »: ne peut être référencé à l'intérieur militaire-statique »

Toute idée que je fais mal ?

+0

Vous écrivez du code C++ illégal - vous ne pouvez pas utiliser 'this' dans ce contexte. Vous devriez considérer la liste de paramètres comme étant "en dehors" de la classe. –

+0

Il n'y a pas assez de contexte dans votre code. Get_days_name() est-il une fonction membre? Essayez-vous d'utiliser le mot réservé 'this' comme nom d'argument? – msw

+0

@Neil comment puis-je obtenir un effet similaire? –

Répondre

5

Vous pouvez faire fonction surchargée:

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

(BTW, this est un pointeur, pas une référence.)

1

J'aime Kenny answer, mais si vous êtes prêt à changer le paramètre d'un référence à un pointeur vous pouvez le faire avec une fonction:

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. 
} 

l'aide d'un pointeur communique plus clairement que value_ est également un paramètre facultatif.

Toutefois, get_days_name devrait probablement être static s'il peut fonctionner sur n'importe quel Date librement.

+0

Oui, belle alternative. –

Questions connexes