我正在研究多边形类:
// A polygon is multiple (possibly closed) polycurves.
template <typename T, typename P = _point<T,2>>
struct _polygon {
using point = P;
// default constructor
_polygon() {
offs_.push_back(0);
}
// build polygon from another type
template <typename U>
_polygon(const _polygon<U> &poly) {
pnts_.reserve(poly.pnts_.size());
offs_ = poly.offs_;
for (const auto& pnt : poly.pnts_) {
pnts_.push_back(point(pnt));
}
}
private:
vector<point> pnts_; // list of points
vector<int> offs_; // offsets of start of polychains
};
问题出在转换构造函数中。访问其他_polygon类型的成员时出现错误消息:
polygon.h:376:28:错误:‘std :: vector, std :: allocator>> sk :: _ new_polygon :: pnts_在此上下文中是私有的 pnts_.reserve(poly.pnts_.size());
很显然,一个类模板C的实例不是朋友/对另一个实例C没有可见性,这对我来说有点令人惊讶。在这种情况下,如何访问另一个多边形的内部进行转换?
答案 0 :(得分:3)
只需将其他模板声明为朋友:
template <typename T, typename P>
friend class _polygon;
我很聪明,用下划线开头的名字来命名您的班级。