错误LNK2019,原因未知

error LNK2019 for unknown reason

本文关键字:未知 LNK2019 错误      更新时间:2023-10-16

我的代码如下:

基本.h

#define Type double

型号.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();
}

型号1.cpp

#include "Model.h"
Type Model1::compute(){
/*definition*/
}

型号2.cpp

#include "Model.h"
Type Model2::compute(){
/*definition*/
}

方法.h

#include "Model.h"
void Method(Model* sys);

方法.cpp

#include "Method.h"
void Method(Model* sys){ 
Type a=sys->compute();
/*code*/}

主要.cpp

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

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

我很沮丧,因为我是这方面的初学者,没能找到钥匙。我不知道是什么原因造成的:我的#define有什么问题吗?或者是因为不同的子类有相同名称的函数(看起来应该没问题)?或者还有其他bug?我甚至不知道该给这个问题添加什么标签。。。

有人能帮我弄清楚吗?非常感谢!


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

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

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

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

例如:

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

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