如何在C++中实现继承并解决错误"父类不可访问子类的基础"?

Muh*_*man 7 c++ inheritance

我是C++的新手.我喜欢在C++中探索继承的想法.每当我尝试编译以下代码时,我都会收到错误:

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
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

 #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();    
    }
Run Code Online (Sandbox Code Playgroud)

那里真的有什么不对?错误的原因是什么以及如何避免错误.请详细解释.

jua*_*nza 16

class有私有默认继承,所以你需要指定public,即

class Ship : public Vehicle { }:
Run Code Online (Sandbox Code Playgroud)

如此.struct默认情况下具有公共继承.