我正在尝试将对象添加到链表结构中,但在Visual Studio 2015中不断收到此错误:
Error LNK2019 unresolved external symbol "public: void __thiscall Stack::add(class Creature *)" (?add@Stack@@QAEXPAVCreature@@@Z) referenced in function _main
这是我要添加到列表中的代码 - 如果我将其修改为简单地将整数值添加到链表(不允许使用 STL),此功能很好:
#include "Creature.h"
void Stack::add(Creature* obj) {
/* create head node if list is empty */
if (head == NULL) {
head = new Node;
head->data = obj;
head->next = NULL;
}
else {
/* set pointer to head */
Node* temp = head;
/* iterate until next node is empty */
while (temp->next != NULL)
temp = temp->next;
/* create new node when NULL */
temp->next = new Node;
temp->next->data = obj;
temp->next->next = NULL;
}
}
这是我的生物类定义(抽象类):
class Creature {
protected:
int strike, defense,
armor, strength,
damage;
bool alive;
string type;
public:
Creature(
strike = 0;
defense = 0;
armor = 0;
strength = 0;
alive = true;
type = " ";
);
virtual int attack() = 0;
virtual bool defend(int) = 0;
virtual string name() = 0;
};
这是我的主要函数,我尝试将对象添加到列表中:
#include "Stack.h"
#include "Creature.h"
#include "Barbarian.h"
int main() {
Stack q;
Creature *test = new Barbarian;
q.add(test);
return 0;
}
我对C++仍然很新鲜,所以我试图学习我能做的一切,并尝试在寻求帮助之前先自己解决问题,但我就是看不出我在这里可能错过了什么。任何帮助/资源将不胜感激!
错误 LNK 2019 是因为"函数或变量已声明但未定义"。但正如您在上面提到的,您已经定义了 stack::add 定义。然后,它可能未添加到当前项目中,因此找不到定义。
在Visual Studio解决方案树中,右键单击项目,然后单击"添加->现有项"->选择源文件(我想在您的情况下它是堆栈.cpp)
看起来我解决了它,我继续咬紧牙关,只是删除了项目并重新导入了文件。