Je dispose d'un fichier cpp comme ceci:Constructors avec des paramètres par défaut dans les fichiers en-tête
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Comment puis-je fais référence dans .h?
Je dispose d'un fichier cpp comme ceci:Constructors avec des paramètres par défaut dans les fichiers en-tête
#include Foo.h;
Foo::Foo(int a, int b=0)
{
this->x = a;
this->y = b;
}
Comment puis-je fais référence dans .h?
.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.
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;
}
Vous devez mettre l'argument par défaut s dans l'en-tête, pas dans le fichier .cpp.
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 */)
et le changer en deux endroits si nécessaire? ;-) –
99% des fois, il ne va pas changer. Donc, vous parlez d'un cas d'utilisation rare :-) – Naveen
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. –
Merci, vous apprécierez la réponse rapide! – royvandewater