2012-07-17 113 views
0

我的代碼是這樣的:錯誤LNK2019

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函數_ma中引用的方法(類Model *)在」。

我很沮喪,因爲我是初學者,無法找出答案。我不知道是什麼原因造成的:我的#define中有什麼不對嗎?或者是因爲不同的子類具有相同名稱的功能(看起來應該可以)?或者還有其他的錯誤?我甚至不知道給這個問題添加什麼標籤...

任何人都可以幫我弄清楚這個嗎?非常感謝!


感謝您的建議和我已更新的問題,以確保所有的構造函數都包含在內。

+0

你寫過構造函數嗎? – Andrew 2012-07-17 08:51:32

+1

這是什麼語法在做:'Model1():Model();'? – Nawaz 2012-07-17 08:52:09

+0

你能告訴我們你是如何構建這個的? – Naveen 2012-07-17 08:52:35

回答

1

看起來好像Method.cpp不是項目的一部分,所以它沒有被編譯,連接器也找不到Method

您應該將所有CPP文件添加到您的項目 - Main,Method,Model1和Model2。當你在這時,確保H文件都在那裏。

+0

嗯,我再次檢查它,並確保所有的文件都在項目中,所以它是如此奇怪。 – 2012-07-17 09:04:01

+0

刪除其餘的代碼(調用方法後),看看是否仍然存在錯誤。問題可能在其他地方。 – zmbq 2012-07-17 09:07:10

+0

是的錯誤仍然存​​在.. – 2012-07-17 09:13:17

0

我想在Model.h中缺少一些分號。 您需要用分號結束類定義。

例如:

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

不知道這是否是解決你的問題不過。但是缺少分號可能會帶來各種問題。