我的代码是这样的:
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有什么问题吗?或者是因为不同的子类具有相同名称的函数(似乎应该没问题)?还是有其他错误?我甚至不知道在这个问题上添加什么标签...
任何人都可以帮我解决这个问题吗?非常感谢!
感谢您提出建议,我已经更新了问题,以确保所有构造函数都包含在内。
答案 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();
};
不确定这是否是您问题的解决方案。但缺少分号会带来各种各样的问题。