例如,
class Segment
{
friend bool someFunc( P_Segment p );
};
typedef boost::shared_ptr<Segment> P_Segment;
如何最好地声明P_Segment以便编译?
答案 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
。