2011-10-04 78 views

回答

3

在这种情况下,你没有选择,因为你不能转发declare typedefs。您必须转发宣布的Segment类。

class Segment; 

typedef boost::shared_ptr<Segment> P_Segment; 

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

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

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

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

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

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

这改变了你如何访问它,当然,你不需要在课堂以外使用Segment::pointer

1

没有错什么其他人说,但只是一种替代方案:

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

using Segment::P_Segment;