2012-07-17 3 views
0

Mon code est comme ceci:LNK2019 d'erreur pour une raison inconnue

Basic.h

#define Type double 

Model.h

#include "Basic.h" 

class Model{ 
protected: 
    int _N; 
public: 
    Model(int _N, Type* config){ config=new Type[N]; _N=N} 
    virtual Type compute(); 
} 
class Model1: public Model{ 
protected: 
    int _Nr,_Nc; 
public: 
    Model1(int Nr, int Nc, Type* config):Model(Nr*Nc,config){_Nr=Nr;_Nc=Nc;} 
    virtual Type compute(); 
} 
class Model2: Public Model{ 
public: 
    Model2(int N,Type* config):Model(N,config){/*other unrelated codes*/} 
    virtual Type compute(); 
} 

Model1.cpp

#include "Model.h" 

Type Model1::compute(){ 
/*definition*/ 
} 

Model2. cpp

#include "Model.h" 

Type Model2::compute(){ 
/*definition*/ 
} 

Method.h

#include "Model.h" 

void Method(Model* sys); 

Method.cpp

#include "Method.h" 

void Method(Model* sys){ 
Type a=sys->compute(); 
/*code*/} 

Main.cpp

#include "Method.h" 

int main(int argc, char** argv){ 
    Model* sys=new Model2(); 
    Method(sys); 
    /*code*/ 
} 

Je ne trouve aucun problème, mais le compilateur ne cesse se plaindre « erreur LNK2019: symbole externe non résolu void __cdecl Méthode (classe Model *) référencée dans la fonction _ma dans".

Je suis tellement frustré parce que je suis un débutant et ne parviens pas à trouver la clé. Je ne sais pas ce qui peut causer ceci: est-ce que quelque chose ne va pas dans mon #define? Ou c'est parce que différentes sous-classes ont des fonctions avec le même nom (semble que cela devrait être OK)? Ou il y a d'autres bugs? Je ne sais même pas pour ajouter quels tags à cette question ...

Quelqu'un peut-il m'aider à comprendre cela? Merci beaucoup!


Merci pour les suggestions et j'ai mis à jour les questions pour s'assurer que tous les constructeurs sont contenus.

+0

avez-vous écrit les constructeurs? – Andrew

+1

Que fait cette syntaxe: 'Model1(): Model();'? – Nawaz

+0

pouvez-vous nous montrer comment construisez-vous cela? – Naveen

Répondre

1

Il semble que Method.cpp ne fasse pas partie du projet, donc il n'est pas compilé et l'éditeur de liens ne peut pas trouver Method.

Vous devez ajouter tous les fichiers CPP à votre projet - Principal, Méthode, Modèle1 et Modèle2. Pendant que vous y êtes, assurez-vous que les fichiers H sont tous là aussi.

+0

Eh bien, je l'ai vérifié à nouveau et assurez-vous que tous les fichiers sont dans le projet de sorte qu'il est si étrange .. –

+0

Supprimer le reste de votre code (après l'appel à la méthode) et voir si l'erreur persiste. Le problème peut être ailleurs. – zmbq

+0

Oui, l'erreur persiste .. –

0

Manquant quelques points-virgules dans le Model.h je pense. Vous devez terminer les définitions de classe par un point-virgule.

Par exemple:

class Model{ 
protected: 
    int _N; 
public: 
    Model(int _N, Type* config){ config=new Type[N]; _N=N} 
    virtual Type compute(); 
}; 

Je ne sais pas si cela est la solution à votre problème cependant. Mais les points-virgules manquants peuvent soulever toutes sortes de problèmes.

Questions connexes