错误LNK2019原因不明

时间:2012-07-17 08:48:03

标签: c++ class

我的代码是这样的:

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*/
}

我找不到任何问题,但编译器一直抱怨“错误LNK2019:未解析的外部符号void __cdecl在函数_main中引用的方法(类Model *)”。

我很沮丧,因为我是这个的初学者而未能找到钥匙。我不知道是什么导致这种情况:我的#define有什么问题吗?或者是因为不同的子类具有相同名称的函数(似乎应该没问题)?还是有其他错误?我甚至不知道在这个问题上添加什么标签...

任何人都可以帮我解决这个问题吗?非常感谢!


感谢您提出建议,我已经更新了问题,以确保所有构造函数都包含在内。

2 个答案:

答案 0 :(得分:1)

似乎Method.cpp不是项目的一部分,所以它没有编译,链接器也找不到Method

您应该将所有CPP文件添加到项目中 - Main,Method,Model1和Model2。当你在它的时候,确保H文件也在那里。

答案 1 :(得分:0)

我认为Model.h中缺少一些分号。 您需要以分号结束类定义。

例如:

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

不确定这是否是您问题的解决方案。但缺少分号会带来各种各样的问题。