How to implement Inheritance in C ++ and resolve the error "the parent class is not an accessible base of the child class"?

I am new to C ++. I like to explore the idea of ​​Inheritance in C ++. Whenever I try to compile the following code, I get an error:

for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated. D:\C Practice Files\Vehicle.cpp: In function `int main()': D:\C Practice Files\Vehicle.cpp:26: error: `void Vehicle::setStationary_state(bool)' is inaccessible D:\C Practice Files\Vehicle.cpp:141: error: within this context D:\C Practice Files\Vehicle.cpp:141: error: `Vehicle' is not an accessible base of `Ship' Execution terminated 

Here is my code:

  #include <iostream.h> #include <conio.h> using std::string; class Vehicle{ private: bool stationary_state; double max_speed; double min_speed; double weight; double volume; int expected_life; string fuel_type; string model; string year_of_manufacture; public: Vehicle(){ } void setStationary_state(bool m){ stationary_state = m; } bool getStationary_state(){ return stationary_state; } }; class Bike:Vehicle{ private: string bike_type; public: void setBike_Type(string t){ type = t; } string getBike_Type(){ return bike_type; } }; class Aircraft:Vehicle{ private: short no_of_wings; public: void setNo_of_wings(short wings) { no_of_wings = wings; } short getNo_of_wings() { return no_of_wings; } }; class Car:Vehicle{ private: string reg_no; string type; public: void setType(string t) { if ((t=="Pneumatic") || (t=="Hydraulic")) { type = t; } else { cout<<"\nInvalid entry. Please enter the correct type:"; setType(t); } } }; class Ship:Vehicle{ private: bool has_radar_detection; public: void setRadar_Detection(bool r){ has_radar_detection = r; } bool getRadar_Detection(){ return has_radar_detection; } }; int x; main() { Vehicle v; Bike b; Car c; Aircraft a; Ship s; s.setStationary_state(true); c.setType("xyz"); /*v.setStationary_state(true); if (!(v.getStationary_state())) { cout<<"Vehicle is moving"; } else { cout<<"Vehicle is at rest"; } */ getch(); } 

What is really wrong there? What is the cause of the error and how to avoid it. Please explain in detail.

+7
source share
4 answers

class has its own inheritance by default, so you need to specify public , i.e.

 class Ship : public Vehicle { }: 

ans and so on. struct has public default inheritance.

+16
source

You need to specify the inheritance access level:

 class Bike : public Vehicle 

those. you need to make the Vehicle a public base.

+1
source

If you do not specify an access specifier, inheritance will be automatically private . You should change this line:

  class Ship:Vehicle 

:

  class Ship:public Vehicle 
+1
source

Encapsulation is achieved by placing related data in one place and ensuring the security of data.include

  1. private - access is granted to the same class
  2. public - any code can access data
  3. protected - access is granted to methods of the same class, friend class, and derived class
0
source

All Articles