CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C++) Erreur de linker

lag-it
lag-it
Niveau 10
12 mai 2004 à 14:40:03

J´obtiens les erreurrs suivantes :

:d) Compilateur error LNK2019: symbole externe non résolu " public: __thiscall AutoTable<class Vector>::AutoTable<class Vector>(int)" ( ??0?$AutoTable@VVector@@@@QAE@H@Z) référencé dans la fonction " public: bool __thiscall Compiler::getPlanes(void)" ( ?getPlanes@Compiler@@QAE_NXZ)

:d) Compilateur error LNK2019: symbole externe non résolu " public: __thiscall AutoTable<class Vector>::~AutoTable<class Vector>(void)" ( ??1?$AutoTable@VVector@@@@QAE@XZ) référencé dans la fonction " public: bool __thiscall Compiler::getPlanes(void)" ( ?getPlanes@Compiler@@QAE_NXZ)

En utilisant une classe que j´ai nommé AutoTable.
C´est un modèle de classe ( template ) et il semblerait que les fonctions incriminées soient les suivantes :

:d) template < class tableType >
AutoTable<tableType>::AutoTable( int size ) : memory( NULL ) , nbElements( size )
{
if( size == 0 )
return;
memory = new tableType[size];
assert( memory ! = NULL ) ;
}

:d) template < class tableType >
AutoTable<tableType>::~AutoTable()
{
if( memory ! = NULL )
delete [] memory;
}

La classe ressemblant à :

:d) template < class tableType >
class AutoTable
{
public:
AutoTable( int size=0 ) ;
~AutoTable();
/ / . ..

private:
tableType *memory;
int nbElements;
/ / . ..
};

Et j´obtiens cette erreur en écrivant la ligne suivante :

:d) AutoTable < Vector> vertice;

( j´ai bien sûr inclut le header contenant la définission de la classe auparavant ) .
Quelqu´un a il une idée ?

LGV
LGV
Niveau 28
12 mai 2004 à 15:09:48

la plupart des compilos ne supportent pas encore la déclaration d´exports ; as-tu bien mis l´implémentation des méthodes de ta classe template dans le . h ?

JeanYvesYves
JeanYvesYves
Niveau 10
12 mai 2004 à 15:10:19

tes fonctions template doivent etre implémentée DANS LE . h et non dans le . cpp

il ne faut pas que les mot " template" apparaisse dans un fichier . cpp

essaie et dis moi si c´est ça :)

lag-it
lag-it
Niveau 10
12 mai 2004 à 15:15:56

Oui ca compile en les mettant dans le . h.
Et je viens de relire mon bouquin et ils font de même.
Merci :)
Mais c´est quand même pas très beau...

JeanYvesYves
JeanYvesYves
Niveau 10
12 mai 2004 à 15:20:28

arf ! hélas, pour les template, tu es obligé !
va voir les fichiers headers des STL : list, vector, set etc...
--> tout dans le . h ! !

la raison est simple : pour garder la généricité alors que le . cpp a disparu, on est obligé de le laisser dans le . h

c´est le linker, qui traite les . h et les . obj, qui va transformer les template :
il va voir qu´il y a un appel pour < int>, un appel pour < double>, alors il va construire une classe avec int, et une autre avec double !
c´est du prélinkage...

lag-it
lag-it
Niveau 10
12 mai 2004 à 15:23:08

Ok merci :)

Ruffi
Ruffi
Niveau 9
12 mai 2004 à 18:09:26

Tien, j´ai eu le meme probleme la semaine dernier et jyy m´avait bien aidé aussi. Que ferait-on sans lui :)

JeanYvesYves
JeanYvesYves
Niveau 10
12 mai 2004 à 18:18:27

:)

lag-it
lag-it
Niveau 10
12 mai 2004 à 19:59:52

C´est vrai :)
Il est sympa d´avois ne bonne entraide sur ce forum.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment