IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

[error] LNK2019: unresolved external symbol "void


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut [error] LNK2019: unresolved external symbol "void
    Bonjour à vous ^^

    Je suis administrateur d'un serveur privé en ligne et je me suis lancé dans le développement c++ d'un émulateur en open source.

    je compile sous windows avec visual 2003.

    d'origine l'émulateur fonctionne très bien mais je souhaiterais faire appel à des fonctions que j'ai créé moi même (donc un nouveau .cpp et un .h) vers un autre fichier .cpp

    Voilà 5 jours que je me creuse la tête sur mon amélioration, et 2 jours que je cherche d'ou vient le problème.

    j'en vient au fait (désolé pour ce long texte, mais c'est mon premier message ici..)

    lorsque je Compile la première partie de l'émulateur, tous va bien.
    lorsque je Compile la 2ème partie de l'émulateur je reçoit 4 erreur de ce type :

    error LNK2019: unresolved external symbol "void __cdecl AjoutMaxskill(class Player *)" (?AjoutMaxskill@@YAXPAVPlayer@@@Z) referenced in function "void __cdecl SendDefaultMenu_PMJ(class Player *,class Creature *,unsigned long)" (?SendDefaultMenu_PMJ@@YAXPAVPlayer@@PAVCreature@@K@Z)
    J'ai fouillé multitudes de forum et essayé beaucoup de modifications sans y trouver un remède pour mon cas.

    4 fonctions void que j'ai créé possèdent cette même erreur.

    Les lignes concernants une fonction void :
    dans le fichier Xian .cpp
    void AjoutMaxskill(Player *player)
    {

    loginDatabase.PExecuteLog("INSERT INTO `maxskill` (`guid`) VALUES (%f)", player->GetGUID());

    }
    dans le fichier Xian .h
    void AjoutMaxskill(Player *player);
    dans le fichier PMJ.cpp
    void SendDefaultMenu_PMJ(Player *player, Creature *_Creature, uint32 action )
    {

    switch (......)
    {

    case ............... :

    if (............... == 2)
    {
    ..............................


    }
    else if (............... == 1)
    {

    AjoutMaxskill(player);
    }
    Voilà rien de trop particulier, lors de la compilation tous va bien pour Xian.cpp et Xian.h , c'est PMJ.cpp qui me met l'erreur en question.

    désolé pour les "..............." c'est pour vous raccourcir les codes non concernés et pour eviter une eventuelle copie de mon idée..

    Tous les include .h nécessaires sont bien associés, rien à dire de ce coté-ci. (raison pour laquelle je ne les ai pas cités.)

    Si vous désirez une explication beaucoup plus détaillée sur l'histoire des 2 parties différentes à compiler n'hesitez pas à demander.
    Je répondrais à toute vos questions tant que je finis par résoudre ce problème un jour ^^
    Je vous remerci d'avance en espèrant avoir une aide

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour et bienvenu sur les forums de DVP

    Est-ce que le fichier source PMJ.cpp inclut bien le fichier d'en-tête Xian.h ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    Oui le Xian.h est bien inclu tout en haut comme il faut ^^

    #include "../../../../game/Xian.h"
    il fait partie de la première compilation et ce trouve donc dans un répertoire différent.

    pour simplifié l'explication :

    1ère compilation : l'emulateur en lui même.
    2ème compilation : l'intelligence artificielle rajouté aux créature dans le jeu.

  4. #4
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Par contre il faut "linker" tes deux parties.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    les 2 parties sont par défaut déjà linké, c'est un émulateur en open source que j'ai repris ^^

    je n'ai fait qu'ajouter 5 scripts .cpp dans la partie 2 faisant appel à des .h des parties 1 et 2 qui fonctionnent à 100%.
    (aussi bien dans le jeu qu'à la compile 0 erreur)

    + 1 script (PMJ.cpp) partie 2 (qui lui possède un erreur de link vis à vis des fonction Void créés dans les xian.cpp et xian.h que j'ai cité)
    et 2 scripts partie 1 (xian.cpp et xian.h) qui eux n'ont pas de problèmes lors de la compilation.

    Le problème reste toujours flou pour moi actuellement bien que je continu de faire des manip.

  6. #6
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Tu peux nous passer les lignes de commandes qui te servent à compiler ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    Etant donné que je débute en c++ , n'ayant pour l'instant créer aucun programme de mes mains , mais plutot développer ce fameux emulateur qui m'intéresse beaucoup.. certains mots m'échappent ^^'

    Que veux-tu dire par lignes de commandes servant à compiler ?
    Ou plutot ou puis-je les trouver ?

  8. #8
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    n'ayant pour l'instant créer aucun programme de mes mains , mais plutot développer ce fameux emulateur qui m'intéresse beaucoup.. certains mots m'échappent ^^'
    Oui, effectivement, dans ce cas on ne dis pas "développer ce fameux emulateur".

    Mais bon.

    Quand tu compiles le bouzin, tu tapes make (peut-être) et puis des tas de trucs s'affichent à l'écran. Tu peux copier coller la section qui précède l'erreur.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    pour moi développer est proche d'améliorer ^^ et programmer est proche de la création. Peut-être ai-je mal saisi :p

    Voici donc les ligne durant la compilation.
    (au passage j'ai pas de lignes de commande, je suis sous windows et j'utilise visual 2003 ^^)

    Linking...

    Creating library ..\..\..\..\bin\release/MaNGOSScript.lib and object ..\..\..\..\bin\release/MaNGOSScript.exp

    PMJ.obj : error LNK2019: unresolved external symbol "void __cdecl AjoutMaxskill(class Player *)" (?AjoutMaxskill@@YAXPAVPlayer@@@Z) referenced in function "void __cdecl SendDefaultMenu_PMJ(class Player *,class Creature *,unsigned long)" (?SendDefaultMenu_PMJ@@YAXPAVPlayer@@PAVCreature@@K@Z)

  10. #10
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Info : les balises code ajoutent la coloration syntaxique toutes seules.

  11. #11
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    pour moi développer est proche d'améliorer ^^ et programmer est proche de la création. Peut-être ai-je mal saisi :p
    Tout à fait bien vu
    A ma connaissance, si tu as cette erreur (que je connais trop bien ) c'est que quelques part soit le fichier Xian.cpp n'as pas était inclu(.cpp dans un projet ou .lib linker) soit c'est seulement la fonction AjoutMaxskill qui n'est pas présent dans la librairie(ancienne version?)... As-tu bien vérifier tout cela?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    je pense que c'est donc la fonction ^^
    car j'ai bien ajouté le xian.h et le xian.cpp dans le makefile.am et le .sln

    comment puis-je donc ajouté mes nouvelles fonctions ? ^^

    ps : je peut envoyer mon msn en mp si une conversation instantannée semble plus simple

  13. #13
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Tu crée une lib lors de la première compilation? Si c'est le cas alors récupère la et échange la avec celle que tu utilise pour la deuxième compilation... c'est simplement une supposition si tes projets ne fonctionnent pas comme ça peux tu donner donner de plus amples détails sur la manière dont fonctionnent tes projets...

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    si tu veux je peut te passer les sources d'origine pour que tu puisse à peut près voir comment tous ce projet ce compile ^^

    enfin si tu as tortoise svn , je pense que c'est beaucoup plus simple de cette façon que d'expliquer par moi même en tant que débutant

    pour être plus précis , c'est un émulateur en open source nommé Mangos que j'essaye d'améliorer.
    A celui-ci s'ajoute un autre projet nommé ScriptDev2 qui sert à rajouté une intelligence artificielle aux créatures.

    s'il faut j'enverrais un morceau de mes modif pour voir si tu peux éventuellement trouver le problème.

    (emulateur utilisé pour le jeu World of warcraft)

    pour être plus précis, ce sont 2 projets différents, et non 2 parties en fait , je me suis mal expliqué

    le 1er projet est une compilation qui créer un .exe (mangos)
    le 1er peut tout a fait fonctionner sans le 2ème.


    et le 2ème projet repasse par dessus. (scriptdev2)

    En tous cas merci beaucoup pour l'aide

  15. #15
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Malheureusement je n'ai pas tortoiseSVN (et je ne savais d'ailleurs pas ce que c'était je viens juste de jeter un bref coup d'oeil...)
    Je dois aussi bien avouer que je commence à me perdre dans les descriptions de ton projet peux-tu faire un petit listing genre :
    (NomProjet) => fichier(xxx.h) ajout de (maFontion())
    fichier(xxx.cpp) ajout de...
    Aussi qu'entends-tu par "le 2ème projet repasse par dessus" ce projet créé quoi exactement?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    étant donné que la liste des fichiers dans le projet est trop long, je t'ai fait 2 screenshots pour les 2 projets.

    Projet 1 (emulateur mangos) :



    Projet 2 (application script IA créatures) :



    Inutile de préciser que presque tous les dossiers contiennent des fichier .cpp et .h

    Ne fait pas attention aux symbole sur les dossier/fichier , c'est un genre de vérification de Tortoise SVN vis à vis des sources d'origines. (un v = dossier/fichier d'origine, un " ! " = dossier/fichier modifié et s'il n'y a rien cela veut dire que c'est un rajout de moi même.

    j'ai rechangé mes lignes de programmes. (le problème de link est toujours présent..)

    Je vais donc te faire 3 screenshots. (dans le PMJ.cpp j'ai effacé des lignes pour eviter une eventuelle copie)

    Xian.cpp :



    Xian.h :



    PMJ.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "../sc_defines.h"
    #include "../../../../game/Player.h"
    #include "../../../../game/GossipDef.h"

  17. #17
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Salut, avec les sources réelles, l'erreur saute aux yeux :

    Dans ton Xian.h tu déclare AjoutMaxSkill() en tant que fonction non membre appartenant au namespace global mais dans Xian.cpp tu implémentes Player::AjoutMaxSkill() fonction membre de Player (probablement même jamais déclarée).

    Dans PMJ.cpp tu appelles la fonction gloable mais du coup elle n'a pas d'implémentation : erreur de link. voila.

    Maintenant c'est à toi de voir, selon ton but, si la fonction doit être membre d'un objet Player ou peut-être globale. @+

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    euh j'avais oublié de l'enlever avant de faire le screenshot le " player:: " sinon il n'y est pas à la base dans Xian.cpp, je l'avais mis car j'avait tenter de mettre mes fonctions dans un autre fichier .cpp qui ce nomme player.cpp possèdant une structure nommé player dans le .h et plein de fonction void appellées par player::

    Je m'excuse pour cette erreur d'inattention.

    en gros le fichier Xian.cpp mis à jour :



    Le problème de Lien persiste toujours.

  19. #19
    Membre confirmé Avatar de babar63
    Homme Profil pro
    Développeur jeux vidéos/3d Temps réel
    Inscrit en
    Septembre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur jeux vidéos/3d Temps réel

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par défaut
    Au moins maintenant tout est bien clair
    Je suppose que le "};" a la fin du fichier 'Xian.h' est juste une erreur d'inattention également ?
    Le fichier PMJ.cpp n'inclut pas ce fichier? Enfin si la fonction n'était pas déclaré ça ne serait pas une erreur de link...
    Pour en revenir au vrai problème, lorsque tu génère le projet Mangos tu obtiens une application n'est-ce-pas? Donc un .exe, en fait le seul à connaitre la DEFINITION de la fonction AjoutMaxskill... Le second projet quand à lui connait la déclaration (si le fichier 'Xian.h' est bien inclu quelques part) mais c'est tout... Je peux me tromper mais je dirai que le problème vient de là... Et si c'est le cas alors pour le régler tu peux peut-être séparé en trois projet... une librairie qui contient la définition des fonctions souhaitées, puis l'application et ton second projet linkés avec cette lib?
    C'est seulement une hypothèse dis-moi si j'ai tout faux

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 37
    Par défaut
    Je suppose que le "};" a la fin du fichier 'Xian.h' est juste une erreur d'inattention également ?
    En effet ^^

    Maintenant que j'ai tous remodifié je vais tenter une recompilation des 2 projets et je te donnerais les nouveaux résultats ^^

    edit : fini de compiler les 2 projets, 0 erreurs pour la compilation en elle même.

    il n'y a que 4 erreurs de liens, comme avant, retour à la case départ

    ScriptDev2 error LNK2019: unresolved external symbol "void __cdecl AjoutMaxskill(class Player *)" (?AjoutMaxskill@@YAXPAVPlayer@@@Z) referenced in function "void __cdecl SendDefaultMenu_PMJ(class Player *,class Creature *,unsigned long)" (?SendDefaultMenu_PMJ@@YAXPAVPlayer@@PAVCreature@@K@Z)

Discussions similaires

  1. error LNK2019: unresolved external symbol
    Par Francixtra dans le forum Visual C++
    Réponses: 4
    Dernier message: 31/03/2011, 02h32
  2. [DDK] error LNK2019: unresolved external symbol
    Par sloshy dans le forum Windows
    Réponses: 2
    Dernier message: 27/06/2008, 22h31
  3. error LNK2019: unresolved external symbol
    Par ilimo dans le forum C++
    Réponses: 22
    Dernier message: 09/04/2006, 23h59
  4. error LNK2019: unresolved external symbol
    Par soniona dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 06/04/2006, 14h03
  5. Réponses: 4
    Dernier message: 23/04/2004, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo