2013-05-08 3 views
0

J'ai regardé cela pendant les deux derniers jours sans succès. J'ai essayé de créer une application graphique avec Qt. Il semble que mon LNK2019 naîtrait de d'un constructeur inappliquées:LNK2019: Portabilité de Windows à OSX

main.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl   ArbObject::ArbObject(class Table *,int *,int,int,int,int,int)" (?? 
[email protected]@[email protected]@@[email protected]) referenced in function "class std::vector<class ArbObject *,class std::allocator<class ArbObject *> > __cdecl 
createArbObjects(class QList<class QStringList> &,class Table *,int &)" ([email protected]@[email protected]@@[email protected]@@@[email protected]@@[email protected]@AEAV? 
[email protected]@@@@[email protected]@[email protected]) 

Cependant, le constructeur est là et mis en œuvre dans le fichier .cpp approprié.

.h file has this: 
ArbObject(Table* tr, int* rgb, int t, int xpos, int ypos, int w, int h); 

.cpp file has this: 
ArbObject::ArbObject(Table* tr, int* rgb, int t, int xpos, int ypos, int w, int h) 
    : QWidget((QWidget*)tr), obj_typ(t), xpos(xpos), ypos(ypos),wid(w), hei(h) 
{ 
... 
} 

J'ai inclus tout ce que je peux penser. Cela ne fonctionne pas sur ma machine Windows, cependant cela fonctionne parfaitement sur mon mac. Ma question est de savoir quelles sortes de dépendances pourraient causer ce genre de problème? Quelles autres voies puis-je explorer pour résoudre mon problème?

  • Est-ce basé sur un compilateur? MSVC vs Clang
  • Les deux incluent des fichiers différents dans le processus de liaison, par conséquent, il peut ne pas fonctionner sur une plate-forme par opposition à une autre.

EDIT: fixe

Voir la réponse!

+0

Avez-vous essayé de compiler votre application avec le compilateur MinGW sous Windows? Quelle version de Qt utilisez-vous? –

+0

Un constructeur doit toujours être __thiscall, pas __cdecl. Difficile de voir comment tu as fait ça. –

+0

@HansPassant, voici ma ligne dans la fonction à laquelle le compilateur fait référence ArbObject * a = new ArbObject (table, RGB, typ, xpos, ypos, largeur, hauteur); Toutes les valeurs ici sont ints sauf pour table et RVB. Il est également dit Fichier non trouvé: main.obj. Peut-être utilise-t-il une ancienne version du fichier main.obj, mais la reconstruction ne change rien du tout. – hbhrugubanda

Répondre

-1

Il s'est avéré que c'était en fait la façon dont j'ai structuré mon code qui a déterminé l'erreur du compilateur. Je ne sais pas exactement pourquoi, mais c'est probablement dû à la façon dont je structure mon code.

Auparavant, j'ai inclus un fichier parser.h avec les fonctions de création pertinentes dans mon fichier main.cpp. Mon raisonnement était le fichier parser.h sera inclus en haut du fichier main.cpp. Parser.h était essentiellement un endroit pour garder les longues fonctions hors de vue.

Maintenant, je crée une classe séparée pour l'analyse/création, qui a ces méthodes pour créer des arbobjects, des balles, etc. La fonction principale crée une instance de l'analyseur et utilise ces méthodes. Cela le rend compile sans erreur de lien