转发声明指向类的指针以在类声明中使用的正确方法是什么?

发布于 12-08 01:32 字数 192 浏览 0 评论 0原文

例如,

   class Segment
   {
      friend bool someFunc( P_Segment p );
   };

typedef boost::shared_ptr<Segment> P_Segment;

如何最好地声明 P_Segment 以便编译?

For example,

   class Segment
   {
      friend bool someFunc( P_Segment p );
   };

typedef boost::shared_ptr<Segment> P_Segment;

How best to declare P_Segment so this compiles?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

楠木可依2024-12-15 01:32:03

在这种情况下,您别无选择,因为您无法转发声明 typedef。您必须转发声明的 Segment 类。

class Segment;

typedef boost::shared_ptr<Segment> P_Segment;

class Segment
{
    friend bool someFunc( P_Segment p );
};

In this case you have no choice since you can't forward declare typedefs. You'll have to forward declared the Segment class instead.

class Segment;

typedef boost::shared_ptr<Segment> P_Segment;

class Segment
{
    friend bool someFunc( P_Segment p );
};
遗弃M2024-12-15 01:32:03

其他人说的没有错,只是提供一种替代方案:

class Segment
{
public:
   typedef boost::shared_ptr<Segment> P_Segment;
   friend bool someFunc( P_Segment p );
};

using Segment::P_Segment;

Nothing wrong with what the others have said, but just for an alternative:

class Segment
{
public:
   typedef boost::shared_ptr<Segment> P_Segment;
   friend bool someFunc( P_Segment p );
};

using Segment::P_Segment;
预谋2024-12-15 01:32:03

向前声明您的类,然后向前声明智能指针(shared_ptr 可以接受不完整类型):

   class Segment;
   typedef boost::shared_ptr<Segment> Segment_PTR;

   class Segment
   {
      friend bool someFunc(Segment_PTR p);
   };

Forward declare your class, and after that forward declare smart pointer (shared_ptr can accepts incomplete types):

   class Segment;
   typedef boost::shared_ptr<Segment> Segment_PTR;

   class Segment
   {
      friend bool someFunc(Segment_PTR p);
   };
吻泪2024-12-15 01:32:03

另一种方法是使 typedef 成为类的成员:

class Segment
{
    typedef boost::shared_ptr<Segment> pointer;
    friend bool someFunc( pointer p );
};

当然,这会改变您访问它的方式,您不必在类之外使用 Segment::pointer

Another way would be to make the typedef a member of the class:

class Segment
{
    typedef boost::shared_ptr<Segment> pointer;
    friend bool someFunc( pointer p );
};

This changes how you access it of course, you noe have to use Segment::pointer outside of the class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文