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()) 定义的文件/代码。

您应该在其中声明它们inlineclass MovePattern如果您真的没有在其中做很多事情):

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

或者在单独的 .cpp 文件中定义它们并将该文件与您的源代码编译/链接:

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

只需删除这两个声明:

MovePattern();
~MovePattern();

您显然不需要这些——因为您在单个 cpp 文件中定义了所有内容。

于 2011-06-16T08:44:02.887 回答