C++ c++;遗产不被承认

C++ c++;遗产不被承认,c++,oop,inheritance,C++,Oop,Inheritance,有什么解决方案吗?或者我必须准确地保留类类型 //头文件 Class Car { public: Car(); virtual ~Car(); }; class Bmw:Car { public: Bmw(); virtual ~Bmw(); }; void Start(Car& mycar) {}; //cpp文件 Car::Car(){} Car::~Car() {} Bmw::Bmw() :Car::Car(){} Bmw::~Bmw

有什么解决方案吗?或者我必须准确地保留类类型

//头文件

Class Car {
public:
    Car();
    virtual ~Car();
};

class Bmw:Car {
public:
    Bmw();
    virtual ~Bmw();
};

void Start(Car& mycar) {};
//cpp文件

Car::Car(){}
Car::~Car() {}

Bmw::Bmw()
    :Car::Car(){}
Bmw::~Bmw() {}

int main() {
    Car myCar;
    Bmw myBmw;

    Start(myCar); //works
    Start(myBmw); //!! doesnt work

    return 0;
}

你应该写
class宝马:公共汽车


这里您想要的是公共继承,而不是私有继承(这是
C++
中类的默认继承)。

您应该编写
类Bmw:public Car


这里您想要的是公共继承,而不是私有继承(这是
C++
中类的默认继承)。

您有
Bmw
Car
私有继承,这阻止将
Bmw
引用转换为
Car
引用。将定义更改为:

class Bmw : public Car

您有
Bmw
Car
私自继承,这会阻止将
Bmw
引用转换为
Car
引用。将定义更改为:

class Bmw : public Car

C++默认为私有继承,因此,您需要将Bmw声明为:

class Bmw:public Car

另外,为了完全准确,您应该真正将
Start
作为
Car
的虚拟方法,并根据需要在子类中重写它

C++默认为私有继承,因此,您需要将Bmw声明为:

class Bmw:public Car

另外,为了完全准确,您应该真正将
Start
作为
Car
的虚拟方法,并根据需要在子类中重写它

您需要公共继承-它表示派生类型和基类型之间的关系。正如宝马是一辆汽车,而私有继承(未明确指定时的默认值以及您在此处拥有的内容)则表示在关系方面的实现

尝试:


您需要公共继承-它表示派生类型和基类型之间的关系。正如宝马是一辆汽车,而私有继承(未明确指定时的默认值以及您在此处拥有的内容)则表示在关系方面的实现

尝试:


我不是机械师,但是
宝马级:公共汽车
应该能很快帮你修好,让你走上理解继承的道路


继承对于
es(
public
对于
struct
s)默认为
private

我不是机械师,但是
class Bmw:public Car
应该能帮你修好,让你在任何时候都能理解继承


继承对于
class
es(
public
for
struct
s)默认为
private

为什么
Start
不是car的方法?另外,您不需要将car称为car::car(),只需将其称为car就可以了
Bmw::Bmw():Car(){}
是完全有效的。为什么
Start
不是Car的一种方法?另外,你不需要把Car称为Car::Car(),只要把它称为Car就可以了<代码>宝马::宝马():汽车(){}
完全有效。