使用引用其他类的类时,我遇到了链接器错误。
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,我还没有发现任何类似于我的问题,任何帮助都将不胜感激。
答案 0 :(得分:2)
您没有定义默认构造函数和析构函数,如下所示:
MovePattern(); //default constructor
~MovePattern(); //destructor
如果你声明它们,你就要定义它们。宣言必须有定义。否则,当使用时,无论是隐式还是显式,都会出现链接器错误。
答案 1 :(得分:2)
此链接器错误是因为您尚未编译/链接包含默认构造函数(MovePattern::MovePattern()
)和析构函数(MovePattern::~MovePattern()
)定义的文件/代码。
你应该在inline
内声明class MovePattern
(如果你真的没有做太多的话):
class MovePattern {
public:
MovePattern () {}
~MovePattern () {}
};
或者在单独的.cpp文件中定义它们,并使用您的源代码编译/链接该文件:
// MovePattern.cpp
MovePattern::MovePattern ()
{
//...
}
MovePattern::~MovePattern ()
{
//...
}
答案 2 :(得分:1)
只需删除这两个声明:
MovePattern();
~MovePattern();
你显然不需要这些 - 因为你在一个cpp文件中定义了所有内容。