我遇到以下问题:
我有一个包含数学类(.h和.cpp文件)的项目。 我想在不同的项目中使用这些类(不是同一个解决方案),但我不能。
在新项目中,我添加了一个包含数学项目包含文件的路径。当我尝试#include他们时,它可以工作,我可以看到我的课程,但在尝试使用它们时,我得到了#34;未解决的外部"。我还没有创建一个.dll或.lib,所以我真的不知道造成这种情况的原因。
如果您有任何建议,我会很感激。
非常感谢你。
答案 0 :(得分:2)
当我尝试#include他们时它起作用,我可以看到我的课程但是 在尝试使用它们时,我得到“未解决的外部”。我没有创造 一个.dll或一个.lib所以我真的不知道是什么造成了这个。
您尚未创建库正是原因为什么会出现错误。新项目中的编译单元(“*.cpp
文件”)包含类的标题并使用类定义,但缺少成员的定义。
例如,假设您的旧项目中有一个名为"c.h"
的文件:
#ifndef C_H
#define C_H
class C
{
public:
C();
void f();
};
#endif
新项目中的某些*.cpp
文件包含标题并使用类:
#include "somepath/oldproject/c.h"
void someFunction()
{
C c;
c.f();
}
编译很好,但会导致链接器错误,因为C::C
和C::f
的定义将会丢失。
现在,对此的干净解决方案肯定不将旧项目中的somepath/oldproject/c.cpp
添加到新项目中,尽管这会修复链接器错误,但是要使用基于库的做法。将您的数学课程变成一个图书馆项目,我们称之为“Math Utils”,它会生成一个*.lib
文件(就像您在Windows上一样),例如math-utils.lib
。将库的包含和释放路径添加到全局包含和库路径。然后将math-utils.lib
文件添加到新项目的链接器依赖项中。
将新项目中的代码更改为:
#include <math-utils/c.h>
void someFunction()
{
C c;
c.f();
}
在旧项目中做同样的事情!您将最终完成三个不同的项目。两个应用项目和一个图书馆项目,前两个取决于后者。
第一次创建自己的库可能有点令人生畏,但好处是值得的。