I may not be understanding private inheritance right, but I thought when you inherited privately that you could still access public member data/functions, but the child class of the derived class would not. For some reason it is saying the public print() method is not accessable in this context....Is there something I'm doing wrong?

#include <iostream>
#include <cstdlib>

class Animal
{
      public:
             Animal() { std::cout << "Animal Constructor....\n"; }
             virtual ~Animal() { std::cout << "Animal Deconstructor...\n"; }
             
             void print() const { std::cout << "Print method...\n"; }
      private:
              void printP() const { std::cout << "Private print method...\n"; }
};


class Dog : public Animal
{
      public: 
              Dog() { std::cout << "Dog constructor...\n"; }
              ~Dog() { std::cout << "Dog deconstructor..\n"; }
};

class Bird : private Animal
{
      public:
             Bird() { std::cout << "Bird constructor...\n"; }
             ~Bird() { std::cout << "Bird deconstructor...\n"; }
};



int main()
{
    Bird b;
    b.print();
}

your compiler is correct. print() is not accessible outside Bird class because of private inherentence. It can only be called from within Bird class just like any other private member.

I'm using bloodshed....It's giving me the same error but I don't understand why. Is it not legal for me to do this?

no its not legal. because you have used private inheritance your class now looks like this.....

class Bird
{
   public:
      Bird();
      virtual ~Bird();
   private:
      void Print()const;
};

now do you see why your code fails.

Comments
Good Stuff

I see now why it didn't compile, but what's the purpose of private inheritance? Is it impossible to implement that method?

private inheritance has its uses. It is similar in effect to composition and nothing like public inheritance. When you become more familiar with c++, you will often find uses for private inheritance.

since Print P function is declared as private in base class, u can not acess that function even if u inherit it as public.
now make print p function as public in base class and using Animal::printP will solve u r problem

This article has been dead for over six months. Start a new discussion instead.