begin process at 2012 05 28 08:33:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Classe et heritage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Classe et heritage

dimanche 7 novembre 2010 à 12:34:19 | Classe et heritage

malkommalkom

Bonjour a tous

Bon alors voila :

j'ai une classe :

template <typename TDATA>
class maClasse
{

public:

maClasse();
~maClasse();

};
template <typename TDATA>
class maSousClasse, public maClasse<TDATA>
{

public:

maSousClasse();
~maSousClasse();

};

Je creer ma librairie, tout compile.

J'utilise ma librairie dans un main pour la tester

maSousClasse<uneClasseAnexe> monTest;

//action de test......

et j'ai :

Undefined reference to maClasse<uneClasseAnexe>::maClasse()
Undefined reference to maClasse<uneClasseAnexe>::~maClasse()
Undefined reference to maSousClasse<uneClasseAnexe>::maSousClasse()
Undefined reference to maSousClasse<uneClasseAnexe>::~maSousClasse()


j'ai bien sur vérifié que les .cpp compiler dans la librairie et c'est le cas.

N'aurais -t-on donc pas le droit de faire herité d'une classe en lui donnant (a la mere) le template de la fille?


DeleteFile("C:\\AUTORUN.EXE");
dimanche 7 novembre 2010 à 18:48:11 | Re : Classe et heritage

DeAtHCrAsH


Salut,

Premiere chose, si tu donnes un template a ta classe mere pourquoi veux tu donner ce meme template a la classe fille ?

Deuxieme chose, revoi la manière dont tu écris ton héritage.
l'héritage s'écrit avec : et non pas avec une virgule, sauf pour l'initialisation des paramètres.

Shell
dimanche 7 novembre 2010 à 19:35:45 | Re : Classe et heritage

malkommalkom


Salut, la virgule est une faute de frappe, j'ai bien ':'

Mais mon problème se révèle plus complexe que sa :

j'effectu ce test :

test.h
Code C/C++ :
template <typename T_DATA>
class myTest
{
 public:
  myTest();       
};
void FonctionTest();



test.cpp
Code C/C++ :
template <typename T_DATA>
myTest<T_DATA>::myTest()
{
//rien c'est juste pour tester l'appel
}

void FonctionTest()
{
//rien c'est juste pour tester l'appel
}


main.h
Code C/C++ :
#include "test.h"


main.cpp
Code C/C++ :
#include "main.h"

int main()
{
 myTest<int> test;

 Fonctiontest();
}


et j'ai : linker error : undefined reference to myTest<int>::myTest()

Lorse que je supprime la declaration de test ca compile et link sans problemme.




DeleteFile("C:\\AUTORUN.EXE");
dimanche 7 novembre 2010 à 19:41:54 | Re : Classe et heritage

malkommalkom



PS :

Désoler pour les fautes ainsi que le Fonctiontest(); dans main.cpp,

j'appelle bien FonctionTest(); . Je me suis tromper de bouton en cliquant sur envoyer au lieux d'aperçu

DeleteFile("C:\\AUTORUN.EXE");
dimanche 7 novembre 2010 à 20:12:49 | Re : Classe et heritage

DeAtHCrAsH


Ca pourrait être utile d'ajouter #include "test.h" tu crois pas ?

Shell
dimanche 7 novembre 2010 à 20:30:27 | Re : Classe et heritage

DeAtHCrAsH

Bon j'ai sérieusement besoin de me réveiller.
Le include est bien la, juste trop petit pour mes yeux encore fermé.

Tu as un erreur car tu as séparré la déclaration et l'implémentation de ton template dans un .h et un .cpp.

Un template ne peut pas être splitté!

Shell
dimanche 7 novembre 2010 à 20:33:32 | Re : Classe et heritage

DeAtHCrAsH


Manque un morceau...

La solution est de tout mettre dans ton header (test.h).
Dernière chose, par habitude on donne à la class le nom du fichier pour plus de lisibilité.

Shell
dimanche 7 novembre 2010 à 23:25:28 | Re : Classe et heritage

malkommalkom

Merci beacoup , reponse claire et precise.

J'avais effectivement remarquer que quand je le metter dans le header sa marcher.

Mais il me semble que j'avais déjà reussis a "splitter" un template.

Quoiqu'il en soit, il est donc impossible de mettre un template en librairie? Il sera forcement visible par le client qui l'utiliserait?

Merci encore.

DeleteFile("C:\\AUTORUN.EXE");
lundi 8 novembre 2010 à 10:02:56 | Re : Classe et heritage

CptPingu

Administrateur CodeS-SourceS
Il est possible de "splitter" une implémentation de header de sa définition, indirectement.
On utilise généralement un .hxx inclut par le .hh, regarde dans mes sources je le fais.

De même, un template n'étant qu'un code crée au moment de son appel, on ne peux le mettre dans une bibliothèque (librairie == erreur de traduction), et on donc doit distribuer les headers contenant des templates.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question


Cette discussion est classée dans : classe, reference, undefined, maclasse, masousclasse


Répondre à ce message

Sujets en rapport avec ce message

[c++builder6] Aide sur création d'une classe (svp)? [ par belkin ] Bonjour, J'aimerais utiliser une classe où je vais avoir des fonctions à l'intérieur. Mais je n'arrive pas à trouver la solution à mon problème. En fa Probleme DevCPP & Glut [ par Kaliman ] Salut à tous j'essaye d'apprendre à utiliser OpenGL grâce à DevCpp mais je n'ai jamais réussi à utiliser glut qui crée des erreurs de link.J'ai ajoute un tableau dans une classe [ par JediMaster ] salut tt le monde j'avais deja poser cet question mais je crois que celui qui ma repondu a pas compris la question donc je veux faire une classe avec prob compil devc++ socket [ par stefdem ] Bonjour,Quelqu'un peut-il me dire ce que je dois faire pour compiler un projet sous DevC++ 4.9.8.5 utilisant des sockets ?J'insiste sur le fait que c' Pointeur et objet ET collection d'objet [ par MrKribou ] En fait je savais pas trop quoi mettre comme titre pour pas copier :pBon je vous explique mon probleme (j'ai pas le source de ce probleme sous la main Probleme avec certains #include ... [ par yudi ] Hello !Voila, cela fait plusieurs sources (récupérées sur le site) ke j'essaye de compiler sans succes, visiblement car la bibliotheque alakelle fait Undefined reference to gluLookAt@72 [ par LiBe444 ] "[Linker Error] Undefined reference to gluLookAt@72"Message obtenu avec gcc.A l'aide, je ne sais pas comment lui faire avaler cette fonction, et je va prob de compilation [ par flatou ] j'utilise devc++ et j'ai un prob de compilation : [Linker error] undefined reference to `WSACreateEvent@0' [Linker error] undefined reference to `WSAE undefined reference to `gotoxy' [ par mailofun ] Bonjour, quand je tente de compiler puis dexecuter mon prog, il y a marqué le message "c:\mes documents\greg\c\prog\untitled1.o(.text+0x9f):untitled1. opengl dev-c++ (undefined reference) [ par prokev ] undefined reference to `auxDIBImageLoadA@4'c'est le message que mon compilateur me donne dans la section linker aussi tot que j'utilise la commande: a


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales