我有一個基類(VectorRaw)和派生類(Vector)。爲什麼派生類不能訪問受保護的基類成員?
我在基類的構造函數中使用operator new來創建一個內存緩衝區,然後在派生類的構造函數中放置new以將元素放置在其中。
基類有它的虛擬析構函數,如果派生類的構造函數中的某些內容出錯,它將清除它。
當我嘗試編譯它時,出現一個錯誤:所有基類成員(begin, end, end_of_reserved
)都超出了所有派生類函數的作用域。
我在做什麼錯?
這裏是我的代碼:
template <typename T>
class VectorRaw {
protected:
T * begin;
T * end;
T * end_of_reserved;
VectorRaw(const size_t size) {
begin = (T*) operator new (2 * size * sizeof(T));
end = begin;
end_of_reserved = begin + 2 * size;
}
virtual ~VectorRaw<T>() throw() {
for (T * iter = begin; iter != end; ++iter) {
iter->~T();
}
operator delete (begin);
end_of_reserved = end = begin;
}
};
template <typename T>
class Vector : public VectorRaw<T> {
public:
Vector(const size_t size, const T& value) : VectorRaw<T>(size) {
for (end = begin; end != begin + size; ++end)
{
new (end) T (value);
}
}
bool Empty() const throw() {
return (begin == end);
}
};
哎呀,編輯:) – FrauHahnhen 2013-03-16 18:27:06