Problème C++ => template - Programmation
Marsh Posté le 12-03-2002 à 11:58:02
Mets les définitions de ta classe template dans son en-tête. D'après mes souvenirs beaucoup de compilateurs n'aiment pas les définitions de classes templates en dissociant en-tête et définition. Pour résoudre ça il leur faut tout définir au même endroit.
Si quelqu'un a mieux je prends aussi.
[jfdsdjhfuetppo]--Message édité par Krueger--[/jfdsdjhfuetppo]
Marsh Posté le 12-03-2002 à 12:06:55
Pff, bien sûr, c'était pas une classe qu'il avait lui-même définie. Quel idiot à répondre trop rapidement...
Marsh Posté le 12-03-2002 à 12:17:53
Pourquoi mettre CList<int,int> ? Je n'ai qu'un type a spécifier.
J'ai quand meme essayer et le compilo dit ; too much arguments.
En attendant j'ai regroupé déclarations et définitions car là ca marchait. Y a pas moyen de les séparer?
Marsh Posté le 12-03-2002 à 15:21:36
Donne la déclaration de ta CList sinon on ne pourra jamais t'aider.
Sinon, en MFC, il y a déjà une classe qui s'appelle CList<T,T>, d'où ma confusion.
Marsh Posté le 12-03-2002 à 16:52:29
Voila la déclaration:
template <class T>
class CList
{
protected:
int m_iSize;
CListNode<T> *m_pHead;
CListNode<T> *m_pTail;
public:
CList( void );
~CList( void );
...
};
Marsh Posté le 12-03-2002 à 17:09:31
mets la declaration et l'implementation dans le .h
si tu separes ca en .h .cpp, le compilo va rien comprendre (cf 1er reply de Krueger)
Marsh Posté le 12-03-2002 à 19:33:48
Ok, je fais comme ca. Merci
Sur un livre, ils disaient qu'il était possible de séparer mais bon on va pas se prendre la tête
Marsh Posté le 12-03-2002 à 19:44:47
ben moi, je sépare quand même en h et cpp.
je mets les declarations dans le h et le code dans un cpp.
puis si un code a besoin de mon template je fais l'include
du cpp.
Marsh Posté le 12-03-2002 à 20:04:40
ayachi a écrit a écrit : ben moi, je sépare quand même en h et cpp. je mets les declarations dans le h et le code dans un cpp. puis si un code a besoin de mon template je fais l'include du cpp. |
Je fais pareil aussi
Marsh Posté le 12-03-2002 à 20:17:31
Aaaah voila !!!
C'est la solution qu'il me fallait !!!
Il faut inclure le fichier .cpp quand on en a besoin et pas le fichier .h !
J'ai testé, ca a l'air de marcher séparé maintenant Merci !!
Marsh Posté le 12-03-2002 à 11:53:35
J'ai créé une classe template CList avec ses déclarations dans un fichier .h et ses définitions dans un fichier .cpp.
Lorsque dans une autre classe je veux un membre ayant pour type CList<int> par exemple j'écris dans sa déclaration:
class CMaclasse
{
private:
CList<int> m_membre;
public:
CMaclasse();
~CMaclasse();
};
Dans le fichier .cpp correponsdant a cette nouvelle classe, si je fais :
CMaclasse::CMaclasse()
{
m_membre = new CList<int>;
}
J'ai une erreur de link:
error LNK2001: unresolved external symbol "public: __thiscall CList<int>::CList<int>(void)"
En fait, j'ai l'impression que les définitions de CList ne sont pas prises en compte...
Si vous comprenez ce je veux dire et que vous pouvez m'aider merci
---------------
Une nouvelle vie vous attend sur les mondes colonisés.