2016-06-25 14 views
0

私はこのエラーが何であるか、そしてそれが何を意味しているのかを知っていますが、私の人生にとって問題は見つかりません。 (私はモジュラー機器の工芸を可能にし、絶縁破壊が起こっているところだゲームに取り組んでいる。)C++ LNK2019エラー、未解決の外字

を私は持っている私の知る限り:

-I'veがすべて含ま#私が必要とするものを含む。

-I'veは、彼らが

-I'veは、必ずすべてのクラスが

ここでのコードの一部ですが通信しているかを離れて二乗され作られた定義を持っていることを確認するために私の機能をチェックし(私は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); 
} 

// ItemPartクラスrecievesデータ、そして他の機能は、タグ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; 
}; 

//は最終的に、該当する項目のクラスは、データをrecieves:

ArmorBack::ArmorBack(ItemPart crafted) 
{ 

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

編集: ここにエラーテキストがあります。

エラー37エラーLNK2019:未解決の外部シンボル「private:class ArmorBack __thiscall Inventory :: makeNewArmor1(class ItemPart)」(?makeNewArmor1 @ Inventory @@ AAE?)を実装しました。 AVArmorBack @@ VItemPart @@@ Z)関数 "public:void __thiscall Inventory :: chooseItem(int)"(?chooseItem @ Inventory @@ QAEXH @ Z)で参照されているC:\ Users \ Forresto \ Documents \ Visual Studio 2012 \ Projects \ゲームチャレンジアスキー\ゲームチャレンジアスキー\ Inventory.objゲームチャレンジアスキー

+0

これはリンカエラーとは関係ありませんが、 'case '1':'本当に '1'だけではなく、1を意味しました – drescherjm

+1

エラーメッセージの全文を投稿できますか?出力(Alt-2)ウィンドウからコピーします。 – drescherjm

+0

はい、各項目の部分には番号付きのタグがあります。これは、特定のItemPartの使用法が表すべき部分を定義するために使用します。 – forresto

答えて

1

あなたは

ArmorBack makeNewArmor1(ItemPart held); 

クラスのメンバ関数を定義したからといって、私ヘッダーは、このメンバ関数が薄い空気から実現することを意味しません。それは宣言されているだけで、一部の翻訳単位(.cppファイル)で定義する必要があります。 makeNewArmor1()chooseItem()から呼び出されるため、このメンバー関数をどこかで定義する必要があります。

あなたが投稿したことは、このメンバ関数がどこにでも定義されていることを示していません。一部の翻訳単位で定義されている場合、正しくリンクされていません。あなたが示したリンクエラー:

Error 37 error LNK2019: unresolved external symbol "private: class 
ArmorBack __thiscall Inventory::makeNewArmor1(class ItemPart)" 
([email protected]@@[email protected]@[email protected]@@Z) referenced 
in function "public: void __thiscall Inventory::chooseItem(int)" 

はかなり自明です。 C++が混乱し、理解できないコンパイルエラーで悪名高いことは事実です。しかし、これはそれらの一つではありません。それはあなたの牛肉が何であるかをかなりわかります:未定義の記号。また、どのシンボルが定義されておらず、どこから参照されているかを示します。それはかなりです。あまり知られていることはありません。

makeNewArmor1()への呼び出しを削除するか、このメソッドを翻訳単位の1つに定義するか、このメンバー関数を定義する翻訳単位が正しくコンパイルまたはリンクされていないかどうかを調べます。あなたの示したその他のリンクエラーの間、Dittoにはありません。

関連する問題