0

私のコードは次のようなものです:

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);

メソッド.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: 未解決の外部シンボル void __cdecl Method(class Model *) referenced in function _main」と不平を言い続けます。

私はこれの初心者であり、キーを見つけることができないので、とてもイライラしています. 何が原因なのかわかりません: #define に何か問題がありますか? それとも、異なるサブクラスに同じ名前の関数があるためですか(問題ないようです)?それとも他のバグがありますか?この質問にどのタグを追加すればよいかさえわかりません...

誰でもこれを理解するのを手伝ってもらえますか? どうもありがとう!


提案していただきありがとうございます。すべてのコンストラクターが含まれていることを確認するために質問を更新しました。

4

2 に答える 2

1

Method.cpp がプロジェクトの一部ではないかのように見えるため、コンパイルされておらず、リンカーが .cpp を見つけることができませんMethod

すべての CPP ファイル (Main、Method、Model1、および Model2) をプロジェクトに追加する必要があります。その間、H ファイルもすべてそこにあることを確認してください。

于 2012-07-17T08:51:47.980 に答える
0

Model.h にいくつかのセミコロンがありません。クラス定義はセミコロンで終了する必要があります。

例えば:

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

ただし、これが問題の解決策であるかどうかはわかりません。ただし、セミコロンがないと、あらゆる種類の問題が発生する可能性があります。

于 2012-07-17T09:21:51.577 に答える