以下代码有什么问题。
我收到编译错误。
我也尝试过向前声明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?

09-07 08:23