【发布时间】:2017-05-26 04:28:43
【问题描述】:
我试图在单例类 A 中实现嵌套的 c++ 类 B。
这是一个库,它构建得很好。
但是当我尝试将它与应用程序链接时,得到链接错误消息。
非常感谢任何提示!
基本上,我想保持从 A 类外部访问 B。
a.lib(aa.obj):错误 LNK2019:未解析的外部符号“公共: __thiscall A::B::B(void)" ...
class A // singleton
{
//...
private:
class B{//...};
std::vector<std::unique_ptr<B>> var;
}
编辑: B类有定义(B.cpp)和标题(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;
【问题讨论】:
-
抱怨你为 B 类声明了一个构造函数,但实际上并没有实现它。您应该显示更多代码(即完整的最低限度、可行的示例)。
-
@selbie 我编辑了我的问题。
-
您是否定义
B类在A中?即class A::B { ... };和void A::B::foo(Bar baz) { ... }。
标签: c++