所以,我有兩個項目,項目2建立一個DLL我哪裏有這個類(頭和CPP後續)與CPP文件瑣碎的定義導致鏈接錯誤
頭虛函數
class classWvirts
{
public:
classWvirts(){};
~classWvirts(){};
virtual int testVirtualFunction();
};
CPP
#include "classWvirts.h"
int classWvirts::testVirtualFunction()
{
return 1;
}
在項目1項(它建立到一個exe),我只是有一個.cpp文件看起來像這樣:
#include "../testApp2/classWvirts.h"
classWvirts obj1;
int main()
{
obj1.testVirtualFunction();
}
這種設置似乎有所有成分,它的工作,我的方法,但它被標記爲虛擬的,在其CPP文件中一個微不足道的定義。
然而,當我嘗試編譯,我得到一個LNK2001鏈接錯誤,看起來像
錯誤1錯誤LNK2019:無法解析的外部符號 「市民:虛擬INT __thiscall classWvirts :: testVirtualFunction(無效)」(? testVirtualFunction @ classWvirts @@ UAEHXZ)在函數_main中引用E:\ Work \ Scratch \ US1212_Virt \ testApp \ testApp \ Source.obj testApp
有人能指出我做錯了什麼嗎?我意識到,如果我把簡單的定義放在頭文件裏,一切都會奏效,但如果這不是一個選項呢? (這顯然是我在一個大型項目中遇到的問題的簡化版本),將cpp編入一個inl並將其包含在標題中可能有空間,但我寧願避免這種情況並保持cpp和header的區別。
與DLL導入庫的鏈接。也將該類聲明爲dll-export。我不記得確切的語法,它是特定於Microsoft的。 – 2014-10-09 03:07:06
是的,剛剛達到了這個結論:)感謝加強相同。 – angryInsomniac 2014-10-09 03:08:24