1. ホーム
  2. c++

[解決済み] オブジェクトファイル内の未解決の外部シンボル

2022-02-07 17:33:26

質問

Visual Studioでコーディング中に、未解決の外部シンボルエラーが発生しました。 どうしたらいいのかわからない。何が問題なのかわかりません。 解読していただけませんか?どこを見ればどんなエラーが出るかわかりますか?

1>Form.obj : error LNK2019: unresolved external symbol "public: class Field * __thiscall Field::addField(class Field *)" (?addField@Field@@QAEPAV1@PAV1@@Z) referenced in function "public: void __thiscall Form::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Form@@QAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>Form.obj : error LNK2019: unresolved external symbol "public: virtual void __thiscall Field::parse(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?parse@Field@@UAEXAAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) referenced in function "public: __thiscall InputField::InputField(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > &)" (??0InputField@@QAE@AAV?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Field::prompt(void)" (?prompt@Field@@UAEXXZ)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Field::getName(void)" (?getName@Field@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall Field::getType(void)" (?getType@Field@@UAE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>Form.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Field::describe(void)" (?describe@Field@@UAEXXZ)
1>C:\Users\tomy\Documents\Visual Studio 2010\Projects\zapoctovkac++\Debug\zapoctovkac++.exe : fatal error LNK1120: 6 unresolved externals

解決方法は?

このエラーは、ある関数に宣言はあるが定義がないことを意味することが多いです。

// A.hpp
class A
{
public:
  void myFunc(); // Function declaration
};

// A.cpp

// Function definition
void A::myFunc()
{
  // do stuff
}

あなたの場合、定義が見つかりません。 問題は、いくつかの関数宣言をもたらすヘッダーファイルが含まれていることかもしれませんが、あなたはどちらか。

  1. cppファイルで関数を定義していない(このコードを自分で書いた場合)。
  2. 定義を含む lib/dll ファイルをインクルードしないでください。

よくある間違いは、関数をスタンドアロンで定義して、クラスセレクタを忘れてしまうことです。 A:: を使用することができます。 .cpp ファイルを作成します。

間違っています。 void myFunc() { /* do stuff */ }
そうですね。 void A::myFunc() { /* do stuff */ }