2011-10-04 112 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;