C LNK2019错误,未解决的外部字符

c++ LNK2019 error, unresolved external character

本文关键字:外部 字符 未解决 LNK2019 错误      更新时间:2023-10-16

我知道这个错误是什么,这是什么意思,但是对于我的生命,我找不到问题。(我正在制作允许制作模块化设备的游戏,这就是发生故障的地方。)

据我所知,我拥有:

- 我包括了我需要的所有#includes。

- 我检查了我的功能,以确保它们具有定义

- 我确保一切都与班级交流的方式平方

这是一些代码(我现在有21个项目类型,所以我只使用几件):

//这只是此功能的一部分,但一直是同一件事。这是崩溃似乎正在发生的地方。

void Inventory::chooseItem(int tag)
{
switch (tag)
{
    //armor
case '1':
    addArmorBack(makeNewArmor1(holder.back()));
    break;
case '2':
    addArmorBreastplate(makeNewArmor2(holder.back()));
    break;
case '3':
    addArmorStraps(makeNewArmor3(holder.back()));
    break;

//.h的私人区域中的相关数据持有人:

vector<ItemPart> holder;
ArmorBack makeNewArmor1(ItemPart held);
ArmorBreastplate makeNewArmor2(ItemPart held);
ArmorStraps makeNewArmor3(ItemPart held);

//项目部分列表

 vector<ArmorBack> armorBackList;
 vector<ArmorBreastplate> armorBreastplateList;
 vector<ArmorStraps> armorStrapsList;

//这是我用来将内容添加到我的列表中的功能的示例。每个项目都是相同的功能。

void Inventory::addArmorBack(ArmorBack makeNew)
{
    string name;
    armorBackList.push_back(makeNew);
    name = makeNew.getName();
    addItem(name);
}

//使用标签int:

class ItemPart
{
public:
ItemPart(int attack, int defense, int health, int experienceMult,     int tag, string name);
//setters
void setName();
//getters
int getDefense();
int getAttack();
int getHealth();
int getExperienceMult();
int getTag();
string getName();
private:
string _name;
int _defense;
int _attack;
int _health;
int _experienceMult;
int _tag;
};

//最后,相关项目类收集数据:

ArmorBack::ArmorBack(ItemPart crafted)
{
_attack = crafted.getAttack();
_defense = crafted.getDefense(); 
_health = crafted.getHealth();
_experienceMult = crafted.getExperienceMult();
_tag = crafted.getTag();
_name = crafted.getName();
}

编辑:这是错误文本。我为我实施的每个项目类型都有其中之一:

错误37错误lnk2019:未解决的外部符号"私人:class Armorback __________________:makenewarmor1(class itempart)"(?makenewarmor1@inventory @@ aake @@ aae?avarmorback @@ vitempart@@@@@vitempart @@ z)void __ thiscall intingrory :: selectItem(int)"(?selectItem@inventory @@ qaexh@z)c: users users forresto document disture Studio Visual Studio 2012 Projects projection game Challenge ascii game Challenge ascii game clage accembal asci.obj aventy.obj Game Game Game挑战ASCIIII III挑战

仅仅是因为您定义了

ArmorBack makeNewArmor1(ItemPart held);

类成员函数在标题中,并不意味着此成员函数将脱离空气。它仅被声明,必须在某些翻译单元(.cpp文件)中定义。makeNewArmor1()是从chooseItem()调用的,因此您必须在某个地方定义此成员函数。

您没有发布任何内容,表明此成员函数在任何地方都定义。如果在某些翻译单元中定义它,则无法正确链接。您显示的链接错误:

Error 37 error LNK2019: unresolved external symbol "private: class
ArmorBack __thiscall Inventory::makeNewArmor1(class ItemPart)"
(?makeNewArmor1@Inventory@@AAE?AVArmorBack@@VItemPart@@@Z) referenced
in function "public: void __thiscall Inventory::chooseItem(int)" 

几乎是自称的。的确,C++因混淆,难以理解的汇编错误而臭名昭著。但这不是其中之一。它几乎告诉您牛肉是什么:未定义的符号。它还告诉您未定义哪个符号以及从何处引用的符号。就是这样。在这里不需要的其他需要知道的其他。

删除对makeNewArmor1()的调用,或在您的一个翻译单元中定义此方法,或者弄清楚定义此成员函数的翻译单元是否未被编译和/或链接,正确地。

同上您显示的其他链接错误。