以下代码有什么问题。
我收到编译错误。
我也尝试过向前声明B类。但是没有成功。
Test.cpp
#include <memory>
#include <iostream>
namespace api
{
class A
{
public:
typedef std::shared_ptr<A> APtr;
APtr get_a_ptr();
B::BPtr get_b_ptr();
};
class B
{
public:
typedef std::shared_ptr<B> BPtr;
BPtr get_b_ptr();
A::APtr get_a_ptr();
};
}
int main(int argc, char **argv)
{
return 0;
}
最佳答案
像这样做:
namespace api
{
class B; // forward declaration
class A
{
public:
typedef std::shared_ptr<A> APtr;
APtr get_a_ptr();
std::shared_ptr<B> get_b_ptr();
};
...
}
问题是您正在从类
B
请求一些尚未定义的东西。因此,使用std::shared_ptr<B>
,一切都会好起来的。有关更多信息,请阅读:When can I use a forward declaration?