そこで、VC++ 8.0 の演習として小さな 3D エンジンを構築しようとしています。TestBed exe によってリンクされている MathLib 静的ライブラリと Render 静的ライブラリがあります。現在、Render には、Color と DXManager3D の 2 つのクラスがあります。Color には、MathLib の Vector.h が含まれていますが、問題ありません。
2 番目に DXManager3D に Vector.h をインクルードしようとすると、シンボルが 2 回定義されており、2 番目の定義が無視されると言って爆発します (lib からの警告)。テストとして、Color.h から Vector.h を削除し、DXManager3D.h に残しました - 同じ問題です。これを防ぐために、すべてが ifndef にラップされていることを確認するためにトリプルチェックを行ったので、頭を悩ませています。
DXManager3D.obj : 警告 LNK4006: "public: __thiscall Math::Vector::Vector(void)" (??0Vector@Math@@QAE@XZ) は Render.obj で既に定義されています。2 番目の定義は無視されます
本当に混乱するのは、Render.lib を TestBed とは別にビルドするときに、これは静的な lib であるため、何もリンクしてはならないということですよね? 複数のシンボル定義の警告が引き続き表示されます。メインで DXManager3D をインスタンス化すると、警告がエラーになります。
Render.lib(DXManager3D.obj): エラー LNK2005: "public: __thiscall Math::Vector::Vector(void)" (??0Vector@Math@@QAE@XZ) は既に WinMain.obj で定義されています
はい、LNK4006 と LNK2005 を F1 しましたが、MSDN の解決策がうまくいきません。この質問が以前に尋ねられた場合は申し訳ありませんが、検索機能を使用するのに役立つ確かなものが見つかりませんでした.
ありがとう!