異なるライブラリにある同じファイル名を持つクラスから継承すると、リンカは未解決の外部シンボルエラーを発生させます。この継承を考えてみましょう:LIB2 :: MyClass:public LIB1 :: MyClass。異なるファイルの同じファイル名を持つクラス継承問題
静的libに "LIB1":
MyClass.h:
namespace LIB1
{
class MyClass
{
public:
MyClass();
~MyClass();
};
}
静的libに "LIB2":
MyClass.h:
#include "..\MyClass.h" // Header of MyClass from lib1 somewhere else than this header file
namespace LIB2
{
class MyClass : public LIB1::MyClass
{
public:
MyClass();
~MyClass();
};
}
のは、両方を想定してみましょう。 cppファイルが存在します。未解決の外部シンボル「パブリック:LIB1
で
LIB2リンクはいくつかの実行ファイルは、その後LIB2にリンクし、派生MyClassのを使用しようと、リンクが
エラーLNK2001で失敗
#include "\lib2\MyClass.h"
int main()
{
LIB2::MyClass c;
}
を言います__thiscall LIB1 :: MyClassの::〜MyClassの(空)
(ctorのために同じ)
MyClass.cppのファイル名をMyClass1.cppに変更するだけで問題ありません。
lib1.libのLIB1:MyClassの定義を検索する代わりに、リンカはそれらをMyClass.obj(lib2から)で見つけようとします。
この動作は、意図的すぎるようにも奇妙に感じます。私は何が欠けていますか?
さらに、libsと実行可能ファイルの両方を含むVS2005/2010のソリューションをセットアップし、VSがプロジェクトのプロパティ - >共通プロパティ - >フレームワークと参照(libのパスをリンカーの設定)リンクが成功します。
EDIT:lib1.libのLIB1:MyClassの定義を検索するのではなく、リンカーはMyClass.obj(lib2から)でそれらを見つけることを試みます。申し訳ありませんが、残念ですが、それは意味をなさない –