Dans un projet C++ basé sur un plug-in, j'ai un TmpClass
qui est utilisé pour échanger des données entre l'application principale et les plugins. Par conséquent, le TmpClass.h
respectif est inclus dans la classe d'interface plugin abstraite qui est incluse par le projet d'application principal et implémentée par chaque plugin. Comme les plugins fonctionnent sur les vecteurs STL de TmpClass
instances, il doit y avoir un constructeur et un destructeur par défaut pour TmpClass
. Je l'avais déclaré dans ces TmpClass.h
:C++: Constructeur/destructeur non résolu lorsqu'il n'est pas en ligne?
class TmpClass {
TmpClass();
~TmpClass();
}
et les mises en œuvre TmpClass.cpp
.
TmpClass::~TmpClass() {}
TmpClass::TmpClass() {}
Cependant, lors de la compilation des plugins cela conduit à l'éditeur de liens se plaindre de deux externals non résolus - le constructeur par défaut et Destructeur de TmpClass
comme l'exige la instanciation de modèle std::vector<TmpClass>
- même si toutes les autres fonctions que je déclare dans TmpClass.h
et mettre en œuvre TmpClass.cpp
travail. Dès que je supprime le constructeur et le destructeur (vide) par défaut du fichier .cpp et les insère dans la déclaration de classe dans le fichier .h, les plugins se compilent et fonctionnent.
Pourquoi le constructeur par défaut et le destructeur ont-ils pour être compilés pour ce code? Pourquoi même? (J'utilise MSVC++ 8).
Avez-vous inclus le TmpClass.cpp dans le projet? – SysAdmin
Oui - voir mon commentaire pour répondre 1. – Anamon