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

时间:2011-10-04 14:48:37

标签: c++ class forward-declaration

例如,

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

typedef boost::shared_ptr<Segment> P_Segment;

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

4 个答案:

答案 0 :(得分:3)

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

class Segment;

typedef boost::shared_ptr<Segment> P_Segment;

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

答案 1 :(得分:1)

其他人所说的话没有错,只是为了替代:

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

using Segment::P_Segment;

答案 2 :(得分:0)

转发声明你的类,然后转发声明智能指针(shared_ptr可以接受不完整的类型):

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

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

答案 3 :(得分:0)

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

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

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