我正在使用dev c ++。我也从一个图书馆获得助手,由其他人为我自己的c ++项目开发。我已经向库中添加了两个名为TriangleList
和TriangleLists
的新类,因为我想要项目的新类类型。有一次,我将hpp和cpp文件添加到库中,我得到了像creating ../lib/libExtraction.a
这样的按摩。
然而,当我从我自己的项目中回调我在新课程中编写的函数时,我得到了错误按摩,如
`[Linker error] undefined reference to `TriangleLists::Erase()`
(上面的一个用于擦除功能) 然后,当我删除.cpp文件并在.hpp中写入所有内容时,它可以工作。
但是,我想进一步为hpp和cpp维护两个文件。所以,请告诉我如何解决这个链接错误问题,因为我想学习这个。提前谢谢你。
答案 0 :(得分:0)
您需要检查的第一件事是您是否正在导出课程:
class __declspec(dllexport) TriangleLists
{
//members
};
但是,当您在其他项目中包含标题时,您需要指定该类已导入,因此:
class __declspec(dllimport) TriangleLists
{
};
这通常通过预处理程序指令实现:
#ifdef BUILDING_FIRST_PROJECT
#define DLLIMPEXP _declspec(dllexport)
#else
#define DLLIMPEXP _declspec(dllimport)
#endif
//TriangleLists.h
class DLLIMPEXP TriangleLists
{
}
并且只在您的第一个项目中定义BUILDING_FIRST_PROJECT
。这样,在构建第一个项目时,您将导出该类,当您在另一个项目中包含标题时,您将导入它。
第二件事是另一个项目必须链接到第一个项目生成的.lib
文件。
将实现移动到标头时它起作用的原因是该方法变为inline
,因此在lib
文件中没有查找它,因为它的定义已经知道。