Considérez ce codeConstructeurs en-ligne? Expliquer ce comportement [C++]
#include <iostream>
#include <cstdio>
using namespace std;
class Dummy {
public:
Dummy();
};
inline Dummy::Dummy() {
printf("Wow! :Dummy rocks\n");
}
int main() {
Dummy d;
}
Tout est bien ici!
Maintenant, je fais cette modification. Je déplace la déclaration de Dummy à "dummy.h".
class Dummy {
public:
Dummy();
};
Et définir le constructeur Dummy() comme suit dans "dummy.cpp"
#include "dummy.h"
inline Dummy::Dummy() {
printf("Wow! :Dummy rocks\n");
}
Et enfin, j'ai mon dossier principal comme:
#include <iostream>
#include <cstdio>
#include "dummy.h"
using namespace std;
int main() {
Dummy d;
}
Il compile bien, mais je reçois une erreur de l'éditeur de liens se plaignant d'une référence indéfinie à Dummy :: Dummy().
Toute idée.
-
yeah.it fonctionne avec le mot-clé inline retiré du constructeur, ce qui implique clairement que l'éditeur de liens obtient les deux fichiers objet, En ce qui concerne la définition des méthodes inline en en-tête, je vois votre point, mais je me demande notez le constructeur? – sud03r
@Neeraj C'est un problème parce que ces autres fonctions n'étaient utilisées que dans le même fichier .cpp que les fonctions en-ligne. – 5ound
@above correct .. – sud03r