2013-06-13 4 views
0

Je travaille avec Qt et Cryengine dans les studios visuels. Je suis très nouveau dans les grands projets comme celui-ci, mais je suis sur le point d'ajouter quelque chose à ce moteur. Mon code se compile morceau par morceau, mais quand j'essaie de compiler mon projet "Indie Game", j'obtiens des erreurs de liaison qui, après recherche, je n'ai toujours aucune idée de comment résoudre. Je sais que les erreurs se rapportent à mon code InventoryGUI, parce que lorsque je supprime ce fichier, le projet se compile bien sans aucune erreur de liaison.Visual Studios (plusieurs projets) Erreur de liaison

Ceci est mon code InventoryGUI et l'erreur qui apparaît lorsque vous essayez de construire Indie Game http://imgur.com/hzmGdvH

Ceci est le fichier d'en-tête qu'il comprend. http://imgur.com/o22GHXg

J'apprécie toute aide que vous pouvez donner à ce sujet. Bien sûr, si vous avez besoin de voir différentes parties de mon code, faites le moi savoir et je l'afficherai aussi.

Merci

Modifier: Vous avez oublié d'ajouter que la fonction « createInventory() » appelle la fonction InventoryGUI d'un autre projet. Je crois que passer d'un projet à l'autre est très probablement la cause des erreurs.

Répondre

0

Si la classe InventoryGUI est définie dans une bibliothèque partagée ("dll") et utilisée dans un exécutable, vous devez exporter ses symboles (sous Windows). alors essayez quelque chose comme:

#ifdef WIN32 
# ifdef MY_LIB_EXPORTS 
#  define MY_LIB_DLL __declspec(dllexport) 
# else 
#  define MY_LIB_DLL __declspec(dllimport) 
# endif 
#else 
# define MY_LIB_DLL 
#endif 

class MY_LIB_DLL InventoryGUI 
{ 
... 
}; 

Ensuite, la bibliothèque définissant InventoryGUI aurait dû définir MY_LIB_EXPORTS. Par exemple, si vous utilisez le système de fichiers pro, il ressemblerait

DEFINES += MY_LIB_EXPORTS 

D'autres projets ne devraient pas. Vérifiez s'il existe un mécanisme similaire pour les autres classes de la bibliothèque.

+0

Je suis désolé totem. Je ne connais pas grand chose au processus de construction et à l'intégration de grands projets comme celui-ci. Je me suis un peu perdue avec ça, même si je pense comprendre une partie de ce que vous dites. Tout d'abord, InventoryGUI est défini dans mon projet Qt qui est compilé en .exe et IndieGame est compilé en .dll. Ce code que tu m'as donné. Je devine que je dois mettre cela dans le Qt dans inventorygui.cpp? Et je suis désolé, mais je ne suis pas ce que vous dites à propos de la bibliothèque définissant InventoryGUI. – user2453703

+0

Une idée m'est venue à l'esprit. Comme je le disais, c'est la première fois que je travaille avec un gros projet comme celui-ci, alors je me contentais de ce qui m'a été donné par défaut. Est-il vraiment préférable d'utiliser des fonctions définies dans un exécutable dans une DLL? Dois-je changer mon projet Qt en .dll? – user2453703

+0

@ user2453703 il n'est sûrement pas correct d'utiliser les fonctions exe dans une DLL: D envisager de faire le contraire à la place. Les symboles d'exposition (comme '__declspec (dllexport)' est fait) pour le code DLL utilisé dans une autre lib ou exécutable – azf

Questions connexes