2015-04-28 73 views
0

我在我的解決方案有3個項目: Project_IProject_AProject_BC++ API實現LNK2019

Project_I包含頭文件(不使用cpp),該項目定義在頭文件中的接口是Project_AProjects_B派生並實現。

因爲我想在默認界面Project_I方法行爲拋出NOT_IMPLEMENTED_EXCEPTION (my std::exception subtype),在任何的Project_I接口(頭文件)聲明的每個方法我寫在頭文件中的這個實現,而且我實現了C'TORs在頭文件。

現在,當我試圖編譯解決方案(定義項目依賴等後......)我收到以下錯誤

Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl Project_I::ClassA::ClassA()" referenced in function "public: __cdecl Project_B::ClassA_1::ClassA_1 K:\src\Project_B\ClassA_1.obj 

爲什麼在VC++編譯器會在.obj文件ClassAproject_I(如果根本沒有cpp文件(整個實現在頭文件中),那麼需要在後面建立)?

+0

你是否將Project_I中的類聲明爲__declspec(dllexport)? –

+0

更好...粘貼聲明和Project_I :: ClassA的定義,請。 –

+0

是的,Project_I聲明爲__declspec(dllexport),因爲所有項目都編譯爲dll。 這裏是Project_I classA聲明和定義標題(無cpp文件): namespace project_i { \t //! Histogram class. \t /*! \t \t Image histogram calculator interface class \t */ \t class PROJECT_I_API ClassA \t { \t public: virtual void Do_Something() \t \t { \t \t \t THROW_ERROR(IPM_NOT_SUPPORTED, "Operation is not implemented."); \t \t } \t \t /*! \t \t Default C'TOR \t \t */ \t \t ClassA(int& _num) : m_num(_num) {} \t \t /*! \t \t Virtual D'TOR of the object \t \t */ \t \t virtual ~ClassA(){} \t protected: \t \t int& m_num; \t \t }; } Hawk89

回答

2

如果你的Project_I::ClassA被實現到頭文件中,它根本不會被編譯到dll中(當然,除非頭文件被Project_I的某個cpp文件包含)。

所以,你有兩個選擇:創建一個cpp文件,幷包含標題,其中包含ClassA定義或刪除任何__declspec聲明。

+0

謝謝。 加入cpp文件幷包含頭文件後問題解決 – Hawk89

+0

@ Hawk89不客氣。不要忘記接受我的回答;) –