我希望有一些包装代码是一个只有标题的库。我受到boost库的启发,只是为了简化分发.lib和包括编译.cpp的需要。重构导致链接器问题与重复
在这个例子中,“z.h”是包装器,而a.cpp已被重构为将B()移入它自己的源文件中。现在它不起作用。
ZH
class Z
{
public:
void Foo(); // edited to match my code
};
Z::Foo() { }
a.cpp
#include "z.h"
void A() {
Z z;
z.Foo();
}
//void B(Z z) {
// z.Foo();
//}
b.cpp
#include "z.h"
void B(Z z) {
z.Foo();
}
*错误LNK2005: “市民:__cdecl无效ž::富()” 已定义在b.obj *
我知道我可以修复t他通过将z.h分为z.h和z.cpp来定义声明。
- 但是,如何让Boost库在没有.cpp文件的情况下离开?
- 一切都需要成为模板吗?
- 什么代码可以在z.h中进行?
你有没有在你的'.h'文件中包含警卫? – juanchopanza 2012-08-15 21:28:57
当然,我有。包括卫兵只会帮助编译,而不是链接。 (至少在视觉工作室中)。 – 2012-08-15 21:30:28
这段代码没问题。你的* real *代码是什么样的?也许在类声明的外部实现Foo * *而不标记它内联? – 2012-08-15 21:32:47