[LNK2001] Problème lien bibliothèque
Bonjour,
Voila lorsque je compile mon projet j'ai l'erreur suivante:
Citation:
1> main.cpp
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall File<class Assiette>::~File<class Assiette>(void)" (??1?$File@VAssiette@@@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall ErreurFile<class Assiette>::verdict(class std::basic_ostream<char,struct std::char_traits<char> > &)const " (?verdict@?$ErreurFile@VAssiette@@@@UBEXAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ErreurFile<class Assiette>::~ErreurFile<class Assiette>(void)" (??1?$ErreurFile@VAssiette@@@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ErreurFilePleine<class Assiette>::~ErreurFilePleine<class Assiette>(void)" (??1?$ErreurFilePleine@VAssiette@@@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall FileBornee<class Assiette,2>::~FileBornee<class Assiette,2>(void)" (??1?$FileBornee@VAssiette@@$01@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: __thiscall FileBornee<class Assiette,2>::FileBornee<class Assiette,2>(void)" (??0?$FileBornee@VAssiette@@$01@@QAE@XZ)
1>C:\Users\Scary\Documents\Visual Studio 2010\Projects\File\Release\File.exe : fatal error LNK1120: 6 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Je vois bien que c'est des problèmes dû aux liens de bibliothèque mais je ne vois vraiment pas ou :(. Voici le main et les .h concernés:
main.cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include "Assiette.h"
#include "FileBornee.h"
#include "ErreurFilePleine.h"
int main ()
{
try
{
FileBornee<Assiette, 2> f;
f.ajoute (Assiette ());
f.ajoute (Assiette ());
f.ajoute (Assiette ());
}
catch (ErreurFilePleine<Assiette> e)
{
e.verdict (std::cout);
}
catch (ErreurFile<Assiette> e)
{
e.verdict (std::cout);
}
return 0;
} |
File.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #ifndef FILE_H
#define FILE_H
#include <vector>
#include <iostream>
template<typename T>
class File
{
protected:
std::vector<T> listElements;
public:
File ();
virtual ~File ();
virtual void ajoute (T t);
virtual T retire () throw (...); // exception ErreurFileVide<T>
virtual int nbElement () const;
virtual bool estVide () const;
virtual T consulte () throw (...); // exception ErreurFileVide<T>
};
#endif |
FileBornee.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #ifndef FILEBORNEE_H
#define FILEBORNEE_H
#include "File.h"
template<typename T, const int taille>
class FileBornee : public virtual File<T>
{
public:
FileBornee ();
virtual ~FileBornee ();
virtual void ajoute (T t) throw (...); // exception ErreurFilePleine<T>
virtual void transvaser (FileBornee<T,taille> *f) throw (...); // exception ErreurFile<T>
virtual int capacite () const;
};
template<typename T1, const int t1, typename T2, const int t2>
void transvaser (FileBornee<T1, t1> *f1, FileBornee<T2, t2> *f2) throw (...) // exception ErreurFile<T1>
{
if ((void*)f2 == (void*)f1)
{
throw ErreurFile<T1> ("en transvasant file dans elle meme");
}
int i = 0;
while (f2->nbElement () > 0)
{
if (dynamic_cast<T1> (f2->consulte ()) == NULL)
{
throw ErreurFileBadElement ();
}
f1->ajoute (dynamic_cast<T1> (f2->retire ()));
}
}
#endif |
ErreurFile.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #ifndef ERREURFILE_H
#define ERREURFILE_H
#include <exception>
#include <string>
template<typename T>
class ErreurFile : public virtual std::exception
{
private:
std::string contexteErreur;
public:
ErreurFile ();
ErreurFile (std::string contexte);
virtual ~ErreurFile () throw ();
virtual void verdict (std::ostream& os) const;
};
#endif |
ErreurFilePleine.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #ifndef ERREURFILEPLEINE_H
#define ERREURFILEPLEINE_H
#include "ErreurFile.h"
template<typename T>
class ErreurFilePleine : public virtual ErreurFile<T>
{
public:
ErreurFilePleine ();
ErreurFilePleine (std::string contexte);
virtual ~ErreurFilePleine () throw ();
};
#endif |
Assiette.h
Code:
1 2 3 4 5 6 7 8 9 10 11
| #ifndef ASSIETTE_H
#define ASSIETTE_H
class Assiette
{
public:
Assiette ();
virtual ~Assiette ();
};
#endif |
Voila si quelqu'un arrive à voir ce qui cloche. Merci d'avance :)