Bonjour à tous,
Je viens vers vous car j’ai un problème de link avec l’héritage, j’ai pu reproduire :
// a.h
template <typename T>
struct A
{
virtual ~A();
virtual void print( T const & ) = 0;
};
// a.cpp
#include "a.h"
template <typename T>
A<T>::~A() { }
// b.h
#include "a.h"
struct Bint
: public A<int>
{
void print( int const & );
// ~Bint();
};
// b.cpp
#include "b.h"
#include <iostream>
void Bint::print( int const & i )
{
std::cout << i << std::endl;
}
//Bint::~Bint() { }
// main.cpp
#include "b.h"
int main( int argc, char ** argv )
{
Bint b;
b.print( 1 );
return 0;
}
Error LNK2019 unresolved external symbol "public: virtual __thiscall A<int>::~A<int>(void)" (??1?$A@H@@UAE@XZ) referenced in function "public: virtual __thiscall Bint::~Bint(void)" (??1Bint@@UAE@XZ)
Error LNK2001 unresolved external symbol "public: virtual __thiscall A<int>::~A<int>(void)" (??1?$A@H@@UAE@XZ)
J’ai essayé de définir le destructeur de Bint
mais rien y fait… Je dois passer à côté d’un truc.
Cependant, quand je déclare/défini tout dans le main.cpp je n’ai plus de problème.
Je compile avec VC140.
Merci d’avance pour votre aide.
+0
-0