J'ai une classe de base (VectorRaw) et une classe dérivée (Vector).Pourquoi la classe dérivée ne peut pas accéder aux membres de la classe de base protégée?
J'utilise opérateur nouveau dans le constructeur de la classe de base pour créer une mémoire tampon, puis placement nouveau dans le constructeur de la classe dérivée pour y placer des éléments.
La classe de base a son destructor virtuel qui nettoie si quelque chose dans le constructeur de la classe dérivée va mal. Quand j'essaye de le compiler, il y a une erreur: tous les membres de la classe de base (begin, end, end_of_reserved
) sont hors de portée dans toutes les fonctions des classes dérivées.
Qu'est-ce que je fais mal?
Voici mon code:
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);
}
};
Oops, édité :) – FrauHahnhen