2009-09-17 7 views

Répondre

53

.h:

class Foo { 
    int x, y; 
    Foo(int a, int b=0); 
}; 

.cc:

#include "foo.h" 

Foo::Foo(int a,int b) 
    : x(a), y(b) { } 

Vous ajoutez uniquement par défaut à la déclaration, non mise en œuvre.

+0

Merci, vous apprécierez la réponse rapide! – royvandewater

8

Le fichier d'en-tête doit avoir les paramètres par défaut, contrairement à cpp.

test.h:

class Test 
{ 
public: 
    Test(int a, int b = 0); 
    int m_a, m_b; 
} 

test.cpp:

Test::Test(int a, int b) 
    : m_a(a), m_b(b) 
{ 

} 

main.cpp:

#include "test.h" 

int main(int argc, char**argv) 
{ 
    Test t1(3, 0); 
    Test t2(3); 
    //....t1 and t2 are the same.... 

    return 0; 
} 
5

Vous devez mettre l'argument par défaut s dans l'en-tête, pas dans le fichier .cpp.

8

Le paramètre par défaut doit être écrit dans le fichier d'en-tête.

Foo(int a, int b = 0); 

Dans cpp, lors de la définition de la méthode, vous ne pouvez pas spécifier le paramètre par défaut. Cependant, je garde la valeur par défaut dans le code commenté pour qu'il soit facile à retenir.

Foo::Foo(int a, int b /* = 0 */) 
+2

et le changer en deux endroits si nécessaire? ;-) –

+1

99% des fois, il ne va pas changer. Donc, vous parlez d'un cas d'utilisation rare :-) – Naveen

+1

A mon avis, c'est dommage que la norme C++ ne nécessite pas * qu'elle soit dans les deux endroits et vérifie que c'est la même chose. Les valeurs par défaut des paramètres font autant partie de l'interface que les types de paramètres. Le compilateur devrait le vérifier. –

Questions connexes