我在我的解決方案有3個項目: Project_I
,Project_A
,Project_B
C++ API實現LNK2019
Project_I包含頭文件(不使用cpp
),該項目定義在頭文件中的接口是Project_A
和Projects_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
文件ClassA
project_I
(如果根本沒有cpp
文件(整個實現在頭文件中),那麼需要在後面建立)?
你是否將Project_I中的類聲明爲__declspec(dllexport)? –
更好...粘貼聲明和Project_I :: ClassA的定義,請。 –
是的,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