我试图在单例类A中实现嵌套的c类B.
这是图书馆,它 Build 得很好 .
但当我尝试将其与应用程序链接时,获取链接错误消息 .
任何暗示非常赞赏!
基本上,我想从A级以外继续访问B.
a.lib(aa.obj):错误LNK2019:未解析的外部符号“public:__thiscall A :: B :: B(void)”...
class A // singleton
{
//...
private:
class B{//...};
std::vector<std::unique_ptr<B>> var;
}
编辑:B类有定义(B.cpp)和 Headers (B.h)
我试图隐藏B.h并使B嵌套类 .
如果我包含“B.h”它编译并链接正常,但然后打开B类到外面..
编辑:解决了!感谢molbdnilo
你在A中定义了B类吗?也就是说,A :: B ;并且无效A :: B :: foo(Bar baz) . - molbdnilo
编辑:这是应用的源代码 .
// A.h
class A // singleton
{
//...
private:
class B;
static std::vector<std::unique_ptr<B>> var;
}
// A.cpp
#include "B.h"
std::vector<std::unique_ptr<A::B>> A::var;
// B.h
#include "A.h"
class A::B
{
//...
};
编辑:找到另一个简单的解决方案,只是排除了A类中的B类 . 我不必暴露B类中的任何东西 .
// private.h
extern std::vector<std::unique_ptr<B>> var;
//A.cpp
std::vector<std::unique_ptr<B>> var;
1 回答
如果你想保持B级私密;我建议在 Headers 中声明它 .
在cpp中,您可以编写以下内容:
如果你这样做的话;您可能还想将Ctor,Dtor,Copy / Move Ctor和Copy / Move赋值的实现移动到cpp和/或删除它们 .