我希望有一些包装代码是一个只有头文件的库。我受到了 boost 库的启发,将它们保留为标题只是为了简化分发 .lib 和包括编译 .cpp 的需要。
在此示例中,“zh”是包装器,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();
}
*error LNK2005: "public: __cdecl void z::Foo()" 已经在 b.obj 中定义*
我知道我可以通过将 zh 分离为 zh 用于声明和 z.cpp 用于定义来解决此问题。
- 但是,没有 .cpp 文件,Boost 库如何摆脱困境呢?
- 一切都需要模板吗?
- zh里能进去什么代码?