I have the following classes:
template <typename T>
class PacketMember
{
public:
PacketMember() { }
// Some non-virtual member functions
};
template <typename T>
class NormalMember : PacketMember<T>
{
public:
};
template <typename T>
class CheckSumMember : PacketMember<T>
{
public:
};
I would like to have a std::vector
container containing std::unique_ptr
or std::shared_ptr
. so I created one like this:
typedef std::unique_ptr<PacketMember<unsigned char> > prt;
std::vector<prt> v;
v.push_back(prt(new NormalMember<unsigned char>(header)));
but compiler complains about PacketMember<unsigned char>
being an inaccessible base of NormalMember<unsigned char>
. I've seen people suggesting on this very website to use a poiter / smart-pointer to the base class and then make it point to derived classes. What am I doing wrong here?