none
よくわからないリンクエラーが出力されています。 RRS feed

  • 質問

  • C++初心者で、初めてフォーラムに登録します。
    よろしくお願い致します。

    VS2005 C++ MFCアプリケーションで、のSDKの製品のSDKのLIB(標準 Windows ライブラリ)を使用し、テストプログラムを作成しています。
    しかしながら、下記のエラーが出力されてしまいます。

    エラー 3 error LNK2019: 未解決の外部シンボル "public: __thiscall CTest_3Dlg::CTest_3Dlg(class CWnd *)" (??0CTest_3Dlg@@QAE@PAVCWnd@@@Z) が関数 "public: virtual int __thiscall CTest_3App::InitInstance(void)" (?InitInstance@CTest_3App@@UAEHXZ) で参照されました。 Test_3.obj
    エラー 4 fatal error LNK1120: 外部参照 1 が未解決です。 C:\・・・・・\TEST_1\Test_3\Debug\Test_3.exe 1


    作成環境はWinXPsp3です。

    元になるSDKのエラーなのか、MFCの作成の問題なのか検討がつかない状態です。
    投稿についても初めてなので、あわせてご教授いただきたくよろしくお願い致します。

    2009年8月24日 11:37

回答

  • エラー 3 error LNK2019: 未解決の外部シンボル "public: __thiscall CTest_3Dlg::CTest_3Dlg(class CWnd *)" (??0CTest_3Dlg@@QAE@PAVCWnd@@@Z) が関数 "public: virtual int __thiscall CTest_3App::InitInstance(void)" (?InitInstance@CTest_3App@@UAEHXZ) で参照されました。 Test_3.obj
    エラー 4 fatal error LNK1120: 外部参照 1 が未解決です。 C:\・・・・・\TEST_1\Test_3\Debug\Test_3.exe 1
    CTest_3Dlg というダイアログのクラスがあると思います。
    このクラスのコンストラクタ(CTest_3Dlg::CTest_3Dlg)の実体が定義されていないということになります。
    「よくわからない」と表現されていますが、C++ ではよくあるミスだと思いますので、ソースコードを一度見直して下さい。

    ところで、新規プロジェクトとして作成してから、色々と編集されているのですよね?どのような編集をされたのでしょうか?


    リンクエラーの例 -----
    class CTest {
    public:
      static void TestMethod();
    };

    void main()
    {
      // CTest::TestMethod の中身がどこにもないので、LNK2019 というエラーになる
      // TestConsole.obj : error LNK2019: 未解決の外部シンボル "public: static void __cdecl CTest::TestMethod(void)" (?TestMethod@CTest@@SAXXZ) が関数 main で参照されました。
      CTest::TestMethod();
    }
    ------


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年8月24日 14:33
    モデレータ
  • VS2005 C++ MFCアプリケーションで、のSDKの製品のSDKのLIB(標準 Windows ライブラリ)を使用し、テストプログラムを作成しています。
    しかしながら、下記のエラーが出力されてしまいます。

    エラー 3 error LNK2019: 未解決の外部シンボル "public: __thiscall CTest_3Dlg::CTest_3Dlg(class CWnd *)" (??0CTest_3Dlg@@QAE@PAVCWnd@@@Z ) が関数 "public: virtual int __thiscall CTest_3App::InitInstance(void)" (?InitInstance@CTest_3App@@UAEHXZ ) で参照されました。 Test_3.obj
    エラー 4 fatal error LNK1120: 外部参照 1 が未解決です。 C:\・・・・・\TEST_1\Test_3\Debug\Test_3.exe 1

    Azuleanさんも書かれていますが、一体どういう修正をしたのだろうと言うのが第一印象です。

    Test_3Dlg.cppにあったCTest_3Dlg::CTest_3Dlg(class CWnd *)のコードが丸ごと無くなっていると
    考えるのが一番簡単なんですが、通常はそういう修正はしないと思うのでそうなってしまった経緯がよくわかりません。

    あと、MFCアプリケーションの中でWin32APIの呼び出しもしていると言う認識で良いのでしょうか。
    もしそうならMFCの範疇で解決できない場合にWin32APIを呼び出す事は全く珍しくない事なので
    それが原因とは思えません。

    SDK製品と言うのが何を指しているのか分からないのでどういう状況なのかが、
    うまく伝わってきていません。

    MFCの構造を理解した上で他のライブラリと組み合わせる分には問題ないと思います。
    あるとすれば、使っているライブラリで競合が発生したりする事もありえるのでうまく行かないケースがないとは言いませんが、
    通常はそういうケースが起こらないように考慮してライブラリを作成すると思いますし。

    基本的にビルドエラーの場合は目に見える原因が必ずあるはずなのでソースとプロジェクト設定の見直しを
    やってみると良いと思います。まあ、まずはソースの確認でしょうね。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 編集済み PATIO 2009年8月25日 0:31
    • 回答としてマーク 高橋 春樹 2009年9月7日 9:33
    2009年8月25日 0:25

すべての返信

  • エラー 3 error LNK2019: 未解決の外部シンボル "public: __thiscall CTest_3Dlg::CTest_3Dlg(class CWnd *)" (??0CTest_3Dlg@@QAE@PAVCWnd@@@Z) が関数 "public: virtual int __thiscall CTest_3App::InitInstance(void)" (?InitInstance@CTest_3App@@UAEHXZ) で参照されました。 Test_3.obj
    エラー 4 fatal error LNK1120: 外部参照 1 が未解決です。 C:\・・・・・\TEST_1\Test_3\Debug\Test_3.exe 1
    CTest_3Dlg というダイアログのクラスがあると思います。
    このクラスのコンストラクタ(CTest_3Dlg::CTest_3Dlg)の実体が定義されていないということになります。
    「よくわからない」と表現されていますが、C++ ではよくあるミスだと思いますので、ソースコードを一度見直して下さい。

    ところで、新規プロジェクトとして作成してから、色々と編集されているのですよね?どのような編集をされたのでしょうか?


    リンクエラーの例 -----
    class CTest {
    public:
      static void TestMethod();
    };

    void main()
    {
      // CTest::TestMethod の中身がどこにもないので、LNK2019 というエラーになる
      // TestConsole.obj : error LNK2019: 未解決の外部シンボル "public: static void __cdecl CTest::TestMethod(void)" (?TestMethod@CTest@@SAXXZ) が関数 main で参照されました。
      CTest::TestMethod();
    }
    ------


    解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。
    2009年8月24日 14:33
    モデレータ
  • VS2005 C++ MFCアプリケーションで、のSDKの製品のSDKのLIB(標準 Windows ライブラリ)を使用し、テストプログラムを作成しています。
    しかしながら、下記のエラーが出力されてしまいます。

    エラー 3 error LNK2019: 未解決の外部シンボル "public: __thiscall CTest_3Dlg::CTest_3Dlg(class CWnd *)" (??0CTest_3Dlg@@QAE@PAVCWnd@@@Z ) が関数 "public: virtual int __thiscall CTest_3App::InitInstance(void)" (?InitInstance@CTest_3App@@UAEHXZ ) で参照されました。 Test_3.obj
    エラー 4 fatal error LNK1120: 外部参照 1 が未解決です。 C:\・・・・・\TEST_1\Test_3\Debug\Test_3.exe 1

    Azuleanさんも書かれていますが、一体どういう修正をしたのだろうと言うのが第一印象です。

    Test_3Dlg.cppにあったCTest_3Dlg::CTest_3Dlg(class CWnd *)のコードが丸ごと無くなっていると
    考えるのが一番簡単なんですが、通常はそういう修正はしないと思うのでそうなってしまった経緯がよくわかりません。

    あと、MFCアプリケーションの中でWin32APIの呼び出しもしていると言う認識で良いのでしょうか。
    もしそうならMFCの範疇で解決できない場合にWin32APIを呼び出す事は全く珍しくない事なので
    それが原因とは思えません。

    SDK製品と言うのが何を指しているのか分からないのでどういう状況なのかが、
    うまく伝わってきていません。

    MFCの構造を理解した上で他のライブラリと組み合わせる分には問題ないと思います。
    あるとすれば、使っているライブラリで競合が発生したりする事もありえるのでうまく行かないケースがないとは言いませんが、
    通常はそういうケースが起こらないように考慮してライブラリを作成すると思いますし。

    基本的にビルドエラーの場合は目に見える原因が必ずあるはずなのでソースとプロジェクト設定の見直しを
    やってみると良いと思います。まあ、まずはソースの確認でしょうね。

    解決した時は、参考になったレスポンスの所にある[回答としてマーク]ボタンをクリックしてスレッドを締めましょう。
    • 編集済み PATIO 2009年8月25日 0:31
    • 回答としてマーク 高橋 春樹 2009年9月7日 9:33
    2009年8月25日 0:25
  • こんにちは、フォーラムオペレーターの高橋春樹です。

    Azuleanさん、PATIOさん、いつもお世話になっております。

    クライフさん、初めまして。
    MSDNフォーラムのご利用ありがとうございます。

    少し間が空いたのですが、その後如何でしょうか?

    今回、AzuleanさんとPATIOさんからの問題の切り分けアドバイスを頂いたので、回答マークを付けさせてもらいました。
    回答マークはスレッドの終了を意味するものではないので、解決していない場合は、今の状況を伝えて頂ければと思います(^-^)

    今後ともMSDNフォーラムをよろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2009年9月7日 9:33