Biên dịch mã này sử dụng g ++ 4.2.1:Lớp cơ sở riêng không chính đáng không thể truy cập?
struct S { };
template<typename T> struct ST { };
template<typename BaseType>
class ref_count : private BaseType { };
template<typename RefCountType>
class rep_base : public RefCountType { };
class wrap_rep : public rep_base<ref_count<S> > {
typedef rep_base<ref_count<S> > base_type; // line 11
};
tôi nhận được:
bug.cpp:1: error: ‘struct S’ is inaccessible
bug.cpp:11: error: within this context
Tuy nhiên, nếu tôi thay đổi lớp wrap_rep
sử dụng ST
:
class wrap_rep : public rep_base<ref_count< ST<int> > > {
typedef rep_base<ref_count< ST<int> > > base_type;
};
nó biên dịch tốt . Ngoài ra, nếu tôi thay đổi mã ban đầu thành:
class wrap_rep : public rep_base<ref_count<S> > {
typedef rep_base<ref_count<::S> > base_type; // now using ::
};
nó cũng biên dịch tốt. Đối với tôi, mã ban đầu có vẻ ổn như vậy. Đây có phải là lỗi g ++ không? Nếu không, thì tại sao sử dụng mẫu làm việc? Và, đối với trường hợp khác, tại sao cần ::S
?
Nhưng sau đó tại sao mã hoạt động với một lớp cơ sở mẫu? –