• ベストアンサー

外部シンボルの未解決のエラー

 今日ずっとタイトルのエラーの解決を探してたんですが,なかなかうまくいきません.助けていただきたいです.よろしくお願いします.   VC++2008を使ってます.エラーは, ――――― エラー 2 error LNK2001: 外部シンボル ""public: void __thiscall Sequence::Game::Parent::SetSeqID(enum Sequence::Game::Parent::Seq)" (?SetSeqID@Parent@Game@Sequence@@QAEXW4Seq@123@@Z)" は未解決です。 Load.obj ――――― エラー 9 error LNK2019: 未解決の外部シンボル "public: __thiscall Sequence::Game::Parent::Parent(int)" (??0Parent@Game@Sequence@@QAE@H@Z) が関数 "public: void __thiscall Sequence::Parent::Update(void)" (?Update@Parent@Sequence@@QAEXXZ) で参照されました。 Parent.obj という類の2種類のエラーが全部で10個ほどと「外部参照○が未解決です」というものです. Parent.cppというものは  Sequence/Parent.cpp Sequence/Game/Parent.cpp と2種類あります.  ちゃんとSequence/Game/Parent.cppにこのヘッダで宣言したものの定義をかいているんですが, このcppのソースを全部消したり,エラーになるようなことを書いてビルドしても 同じエラーが同じだけでてしまうので, 恐らく,このソースをうまく一緒にコンパイルできてないのだと思います というところまで 今日調べてわかりました. ちゃんとプロジェクトの中には入ってますし,フォルダ構成も間違ってないと思うんですが,リビルトしてみると Parent.cpp が一回しかコンパイルされてません. このエラーの一歩前の段階は Sequence/Parent.cpp に関しての外部シンボルの未解決エラーでした.  解決策をいただきたいです.よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • riwity
  • ベストアンサー率58% (7/12)
回答No.1

このエラーは「関数を宣言しているのに定義していない」場合によく出ます。 Parentクラス内のParent(int)とSetSeqID(...)をよく確認してみてください。 Loadクラスも怪しいです。 あるいはバグがあった頃のまま.objが更新されていないのかもしれません。 プロジェクトをクリーンするなどしてみてください。 ところで、なぜParent.cppが二つあるのでしょう? 別のクラスですか?1つのクラスを2つのcppに分けて書いているのですか?

hourainoas
質問者

補足

 迅速なご返信ありがとうございます. Parentクラス内は何度も見てみましたが,正しく定義もかけていると思います.参考書を見てやっていて,サンプルをそのまま入力してもみたんですが,このエラーが出てしまいました.  わかりづらくてすみません. ゲームのシーケンスを作るために,階層に一つずつparentというクラスを入れるつくりです. よって,別のクラスとなります.よろしくお願いします.

その他の回答 (4)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

とりあえず, 落ち着いて「必要なファイルが全てコンパイル・リンクされている」ことを確認する方がいいような気がするなぁ.

hourainoas
質問者

お礼

お礼はここにまとめて書かせていただきます.  少し煮え切らない解決でしたが,先に進めました,もっと知識が増えたあとでもう一度考えてみたいと思います.  ありがとうございました. ポイントは解決策とは関係をなく配分します. では皆さん,ありがとうございました.またよろしくお願いします.m(_ _)m

hourainoas
質問者

補足

ご返信ありがとうございます.そうなんです,parent.cppのどちらか一つがコンパイルされないようなんです.そこで名前を変えたら, ■■■ できました ■■■ 結局プログラム自体はいじくらなかったんです. 1,Sequence/Parent.cpp の名前を Sequence/GParent.cpp などと変更 2,1をプロジェクトに追加 3,以前の名前のプロジェクトをプロジェクトから除外 4,VC++を再起動 でエラーがなくなりました. そこで時間がある方に回答していただきたいです. 質問1, ディレクトリの階層が違って名前が同じソースファイルがあって,どちらか一つがコンパイルしなかった原因を予想でもいいので教えていただきたいです.(宣言の定義の書かれているソースをコンパイルできなかったからこのエラーがでたと思われます.) 質問2, このような解決策って実際にあるものなんでしょうか.再起動しないと反映されないような.#1さんの言っていた クリーン というのはこういうことなんでしょうか. でも,まずは解決できたのでよかったです. ホントに皆さん考えていただきありがとうございました.m(_ _)m

  • riwity
  • ベストアンサー率58% (7/12)
回答No.4

LNK2001は純粋仮想関数の定義が継承先で無い場合に発生しました。 なので継承に何か問題があるのかもしれません。 親クラスも調べてみては? ちなみに子クラスで純粋仮想関数の宣言が無い場合は、「抽象クラスをインスタンス化できません」とエラーがでます。

hourainoas
質問者

補足

 度々ご返信ありがとうございます. このプログラムには継承を利用していないので(自分はまだ応用できないレベルです,すみません.)継承の問題はないと思います.  さっき開いたら,最初のSequence/Game/Parentに関する10個ほどのエラーとは打って変わって今度はSequence/Parentに関する エラー 2 error LNK2001: 外部シンボル ""public: void __thiscall Sequence::Parent::SetSeqID(enum Sequence::Parent::SeqID)" (?SetSeqID@Parent@Sequence@@QAEXW4SeqID@12@@Z)" は未解決です。 StageSelect.obj というようなエラーが8つほどでてきました.なんなんでしょう... 混乱してきました.

  • nitho_t
  • ベストアンサー率49% (44/89)
回答No.3

宣言の他に定義が存在し、コンパイルエラーではなくてリンカエラーであるのでclass内classの参照とか、namespace内namespaceの問題はクリアしているでしょうから、一番あり得そうなのが、 Load.cppがSequence/直下にあり、各ヘッダーの所在が Sequence/Parent.h Sequence/Game/Parent.h と仮定すると、 Load.cpp(or h)に #include ".\Game\Parent.h"の記述がなければエラー2になるだろうし、 エラー9はLNK2019:で "public: __thiscall Sequence::Game::Parent::Parent(int)"だからint引数のコンストラクタがないんじゃないかな?デフォルトコンストラクタはあっても。 とりあえず予想はこんなところです。

hourainoas
質問者

補足

ご返信ありがとうございます.  Load.cpp(or h) はSequence/Game/Load.cpp(or h)にあり,また, #include "Sequence/Game/Parent.h"と書いてあります.  あぁ,このエラーはそうやって考えるんですか.勉強になります. でも,ちゃんとコンストラクタは設定してありました.    Parentのどちらかが読み込まれないのが気になったのでSequence/Parent.cpp(or h)の方を Sequence/GParent.cpp(or h)にして整理したら 両方コンパイルされるようになったんですが,やはりエラーは変わりませんでした. この同じ名前だとなぜコンパイルされないのか,,それも疑問です. 参考書のサンプルは同じでも平気でした.

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

#1さんが書かれた「関数」の他に、 「変数を宣言したが定義していない」場合も 「外部シンボル未解決」エラーが出ます。 >Sequence/Game/Parent.cppにこのヘッダで宣言したものの定義をかいているんですが, 「このヘッダ」とは、どのヘッダでしょうか? 言及していないため、詳細がわかりません。

hourainoas
質問者

補足

ご返信ありがとうございます.  宣言しただけのものとかがないか今日ずっと探していたんですが,やはりないようです. このヘッダというのはSequence/Game/Parent.h のことです.すみません.慣れないエラーなのでどこを鮮明に言及すればいいかわかりませんでした.  あと,Sequence/Game/Parent.h のように,ディレクトリの中に置いたものは,名前空間Sequence , Game を利用して合わせています.  自分が気になるところを言及させていただくと, Sequence/Game/Parent.h に Sequence::Game::Parentのクラスなど宣言 Sequence/Game/Parent.cpp に その定義 を書いています. それで↑の.cppの方を消してもそれに関してのエラーは出ずに,今までと同じエラーがでるので,これが読み込まれていないのではないかと感じました.その解決策がわからないのです. よろしくお願いいたします.m(_ _)m

関連するQ&A

  • 未解決の外部シンボル

    Microsoft DirectX SDK (August 2009)\Samples\C++\Direct3\MultiAnimationをデスクトップにコピーして実行すると動くんですが、SampleBrowserからemptyprojectをインストールして MultiAnimationと同じcppとhをプロジェクトに追加すると、 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10CreateEffectFromMemory@56 が関数 "public: long __thiscall CDXUTDialogResourceManager::OnD3D10CreateDevice(struct ID3D10Device *)" (?OnD3D10CreateDevice@CDXUTDialogResourceManager@@QAEJPAUID3D10Device@@@Z) で参照されました。 1>DXUTcamera.obj : error LNK2001: 外部シンボル "_D3DX10CreateEffectFromMemory@56" は未解決です。 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10CreateSprite@12 が関数 "public: long __thiscall CDXUTDialogResourceManager::OnD3D10ResizedSwapChain(struct ID3D10Device *,struct DXGI_SURFACE_DESC const *)" (?OnD3D10ResizedSwapChain@CDXUTDialogResourceManager@@QAEJPAUID3D10Device@@PBUDXGI_SURFACE_DESC@@@Z) で参照されました。 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10CreateFontW@48 が関数 "protected: long __thiscall CDXUTDialogResourceManager::CreateFont10(unsigned int)" (?CreateFont10@CDXUTDialogResourceManager@@IAEJI@Z) で参照されました。 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10CreateTextureFromFileW@24 が関数 "protected: long __thiscall CDXUTDialogResourceManager::CreateTexture10(unsigned int)" (?CreateTexture10@CDXUTDialogResourceManager@@IAEJI@Z) で参照されました。 1>SDKmisc.obj : error LNK2001: 外部シンボル "_D3DX10CreateTextureFromFileW@24" は未解決です。 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10GetImageInfoFromFileW@16 が関数 "protected: long __thiscall CDXUTDialogResourceManager::CreateTexture10(unsigned int)" (?CreateTexture10@CDXUTDialogResourceManager@@IAEJI@Z) で参照されました。 1>SDKmisc.obj : error LNK2001: 外部シンボル "_D3DX10GetImageInfoFromFileW@16" は未解決です。 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10CreateTextureFromResourceW@28 が関数 "protected: long __thiscall CDXUTDialogResourceManager::CreateTexture10(unsigned int)" (?CreateTexture10@CDXUTDialogResourceManager@@IAEJI@Z) で参照されました。 1>DXUTgui.obj : error LNK2019: 未解決の外部シンボル _D3DX10GetImageInfoFromResourceW@20 が関数 "protected: long __thiscall CDXUTDialogResourceManager::CreateTexture10(unsigned int)" (?CreateTexture10@CDXUTDialogResourceManager@@IAEJI@Z) で参照されました。 1>DXUTres.obj : error LNK2019: 未解決の外部シンボル _D3DX10CreateTextureFromMemory@28 が 関数 "long __stdcall DXUTCreateGUITextureFromInternalArray10(struct ID3D10Device *,struct ID3D10Texture2D * *,struct D3DX10_IMAGE_INFO *)" (?DXUTCreateGUITextureFromInternalArray10@@YGJPAUID3D10Device@@PAPAUID3D10Texture2D@@PAUD3DX10_IMAGE_INFO@@@Z) で参照されました。 1>DXUTres.obj : error LNK2019: 未解決の外部シンボル _D3DX10GetImageInfoFromMemory@20 が関数 "long __stdcall DXUTCreateGUITextureFromInternalArray10(struct ID3D10Device *,struct ID3D10Texture2D * *,struct D3DX10_IMAGE_INFO *)" (?DXUTCreateGUITextureFromInternalArray10@@YGJPAUID3D10Device@@PAPAUID3D10Texture2D@@PAUD3DX10_IMAGE_INFO@@@Z) で参照されました。 1>Debug\GRAVITY ESCAPE.exe : fatal error LNK1120: 外部参照 9 が未解決です。 とでます(長くてすみません)。 追加のインクルードディレクトリにはDXUT\Optional;DXUT\Coreを指定しています。 独学で勉強しているんですが、このエラーの原因がまったく分かりません。 どなたかよろしくお願いします。

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • 外部シンボル未解決 LNK2001

    外部シンボル未解決 LNK2001 今windowsXP32bitからwindowsXP64bitPCでのデバッグを行おうとしています。 開発環境VC++2005です。 しかし、32bitPCでは、エラーなどなかったのですが64bitPCだと次のようなエラーが発生しました。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DP8SP_TCPIP" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Address" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlay8Client" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultCapture" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>MainteDlg.obj : error LNK2001: 外部シンボル "DSDEVID_DefaultPlayback" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "CLSID_DirectPlayVoiceClient" は未解決です。 5>DirectPlay.obj : error LNK2001: 外部シンボル "IID_IDirectPlayVoiceClient" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "PIN_CATEGORY_PREVIEW" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IBasicVideo" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_VideoInputDeviceCategory" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "CLSID_SystemDeviceEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_ICreateDevEnum" は未解決です。 5>DirectShow.obj : error LNK2001: 外部シンボル "IID_IMediaControl" は未解決です。 とエラーがでています。 一応構成マネージャーの設定は、64x設定しています 何か設定などたりないのでしょうか? よろしくお願いします。

  • 「外部シンボル "_DirectDrawCreate@12" は未解決」って???

    外国のサイトで拾ってきたVisual C++のソースコードをコンパイルしたら 次のようなエラーが出ました。 --------------------------------- (1) test.obj : error LNK2001: 外部シンボル "_DirectDrawCreate@12" は未解決です (2) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です (3) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です (4) Debug/prog.exe : fatal error LNK1120: 外部参照 3 が未解決です。 (5) link.exe の実行エラー --------------------------------- 特に、(1)~(3) の意味がよく分かりません。 Readmeを見ると、「コンパイルすればいい」としか書いてないのですが、、、 もし原因がわかったらお願いします。

  • 未解決の外部シンボル

    ソースはvc++2005からVC++.net2003に各ソースをコピペしてビルドしてみたら EmptyProject.obj : error LNK2019: 未解決の外部シンボル "struct IDirect3D9 * __cdecl DXUTGetD3DObject(void)" (?DXUTGetD3DObject@@YAPAUIDirect3D9@@XZ) が関数 "bool __stdcall IsDeviceAcceptable(struct _D3DCAPS9 *,enum _D3DFORMAT,enum _D3DFORMAT,bool,void *)" (?IsDeviceAcceptable@@YG_NPAU_D3DCAPS9@@W4_D3DFORMAT@@1_NPAX@Z) で参照されました。 EmptyProject.obj : error LNK2019: 未解決の外部シンボル "int __cdecl DXUTGetExitCode(void)" (?DXUTGetExitCode@@YAHXZ) が関数 _WinMain@16 で参照されました。     ・     ・      ・  というエラーがでました。どうしたら通りますでしょうか?

  • 外部シンボルについて

    リンク中... session.obj : error LNK2001: 外部シンボル "_bcopy" は未解決です session.obj : error LNK2001: 外部シンボル "_bzero" は未解決です Debug/session.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー VC++を使用しましてビルドとコンパイルをしますと上記のようなエラーがでます。ライブラリのリンク不足なのでしょうか?どのファイルを使用すればいいかわかりません。宜しくお願いします。

  • 外部シンボル" ~~"は未解決ですというエラーが直らない

    VisualStdio2005で空のプロジェクトからコンソールアプリケーションを作成しています。 以下の三つのエラーが解決できなくて悩んでいます。 : error LNK2001: 外部シンボル "_name" は未解決です。 : error LNK2001: 外部シンボル "_teki" は未解決です。 : fatal error LNK1120: 外部参照 2 が未解決です。 nameとtekiはchar型の変数として宣言しています。 このエラーはどのようにいじれば解決するのでしょうか。 助けてください。

  • 配列の操作時にLNK2001外部シンボルが未解決がでてしまいます。

    test.hにて class test{ public: static int test[8][8]; static int test1[8]; public: static int set_test(); } を定義して test.cppで void test(){ test[0][0] = 0; test1[0] = 0; } とすると LNK1120: 外部参照 1 が未解決です。 LNK2001外部シンボルが未解決です。 となってしまいます。 環境は Visual Studio 2005 C++です。

  • エラー 未解決の外部シンボル

    プログラム初心者です。 以下のエラーが出て解決方法がわからず困っております。ご存知の方宜しくお願いします。 エラー 1 error LNK2019: 未解決の外部シンボル __imp__ntohs@4 が関数 "void __cdecl packet_print(unsigned char *,struct pcap_pkthdr const *,unsigned char const *)" (?packet_print@@YAXPAEPBUpcap_pkthdr@@PBE@Z) で参照されました。 main.obj エラー 2 fatal error LNK1120: 外部参照 1 が未解決です。 C:\Documents and Settings\谷本\My Documents\Visual Studio 2005\Projects\Packetmoni_Base\Debug\Packetmoni_Base.exe