0

他のクラスを参照するクラスを使用すると、リンカー エラーが発生します。

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MovePattern::~MovePattern(void)" (??1MovePattern@@QAE@XZ) referenced in function "public: __thiscall Enemy::Enemy(int,int,class MovePattern,char)" (??0Enemy@@QAE@HHVMovePattern@@D@Z)
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MovePattern::MovePattern(void)" (??0MovePattern@@QAE@XZ) referenced in function "public: __thiscall Enemy::Enemy(int,int,class MovePattern,char)" (??0Enemy@@QAE@HHVMovePattern@@D@Z)

これは、このクラスを参照することによるものです:

class MovePattern{
    public: 
        char next;

        MovePattern();
        MovePattern(const MovePattern &old){
            p = old.p;
            pi = 0;
            next = p[0];
            n = p[0];
        }

        MovePattern(char *pattern){
            p = pattern;
            pi = 0;
        next = p[0];
        n = p[0];
        }
        ~MovePattern();

このクラスでは:

class Enemy{
    public:
    Enemy(int a, int b, MovePattern p,char c)
    x = b;
    y = a;

    MovePattern pattern (p);
    symbol = c;

それらは現在同じ .cpp ファイル内にあり、MovePattern は Enemy の上にあります。

ここで何が起こっているのかわかりません

空のコンソール プロジェクトを含む Visual C++ 2010 Express で、私の問題に似たものはまだ見つかりません。助けていただければ幸いです。

4

3 に答える 3

2

以下に示すように、デフォルトのコンストラクタとデストラクタを定義していません。

MovePattern();  //default constructor
~MovePattern(); //destructor

それらを宣言する場合は、それらを定義する必要があります。宣言には定義が必要です。そうしないと、暗黙的または明示的に使用するときにリンカー エラーが発生します。

于 2011-06-16T08:17:28.330 に答える
2

MovePattern::MovePattern()このリンカ エラーは、デフォルトのコンストラクタ ( ) とデストラクタ ( MovePattern::~MovePattern()) の定義を含むファイル/コードをコンパイル/リンクしていないために発生します。

inlineの中でそれらを宣言する必要がありclass MovePatternます(実際に多くのことをしない場合):

class MovePattern {
public:
  MovePattern () {}
  ~MovePattern () {}
};

または、別の .cpp ファイルでそれらを定義し、そのファイルをソースとコンパイル/リンクします。

// MovePattern.cpp
MovePattern::MovePattern ()
{
  //...
}
MovePattern::~MovePattern ()
{
  //...
}
于 2011-06-16T08:18:44.613 に答える
1

次の 2 つの宣言を削除するだけです。

MovePattern();
~MovePattern();

単一の cpp ファイルですべてを定義したため、明らかにこれらは必要ありません。

于 2011-06-16T08:44:02.887 に答える