首页 文章

c嵌套类未解析的外部符号

提问于
浏览
0

我试图在单例类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 回答

  • 0

    如果你想保持B级私密;我建议在 Headers 中声明它 .

    在cpp中,您可以编写以下内容:

    class A::B final {
        // All code for B
    };
    

    如果你这样做的话;您可能还想将Ctor,Dtor,Copy / Move Ctor和Copy / Move赋值的实现移动到cpp和/或删除它们 .

相关问题