當從駐留在不同的lib中的鏈接器產生一個解析的外部符號錯誤相同的文件名一個類繼承。想想這個繼承:LIB2 :: MyClass:public LIB1 :: MyClass。類具有相同的文件名在不同庫繼承問題
靜態庫 「LIB1」:
MyClass.h:
namespace LIB1
{
class MyClass
{
public:
MyClass();
~MyClass();
};
}
靜態庫 「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的,說
#include "\lib2\MyClass.h"
int main()
{
LIB2::MyClass c;
}
鏈接失敗,
錯誤LNK2001:無法解析的外部符號「公用: __thiscall LIB1 :: MyClass ::〜MyClass(void)
(與ctor相同)
當我簡單地將其中一個MyClass.cpp的文件名更改爲MyClass1.cpp時,一切都很好。
不是搜索LIB1的定義:在lib1.lib鏈接MyClass的試圖找到他們MyClass.obj(從LIB2)我懷疑。
這種行爲只是感覺太奇怪,是故意。我錯過了什麼?
此外,當在VS2005/2010中設置一個解決方案,包括庫和可執行文件,並讓VS通過Project Properties-> Common Properties-> Framework和References來設置所有lib依賴關係(而不是提供路徑到庫中的鏈接器設置)鏈接成功。
編輯:而不是在lib1.lib搜索LIB1:MyClass的定義鏈接器試圖找到它們在MyClass.obj(從lib2)我懷疑...對不起,忘了那,這沒有任何意義 – 2012-02-03 15:12:17