gpt4 book ai didi

C++ 外联定义纯虚方法

转载 作者:行者123 更新时间:2023-11-28 02:10:32 24 4
gpt4 key购买 nike

我有 4 个文件 car.cpp、car.h、motorvehicle.h 和 vehicle.h。我在 QT-creator 环境中编程。

我遇到的问题是:

错误:“getSafetyRating”的外联定义与“vehicle::Car”中的任何声明都不匹配int Car::getSafetyRating()

以下是供引用的程序文件,我是学习c++的新手,非常感谢您的帮助!干杯亚历克斯。如果有任何问题,我提前道歉。

车辆.h

#ifndef VEHICLE_H
#define VEHICLE_H

#include <string>

namespace vehicle
{
class Vehicle
{
public:
Vehicle(int numberOfPassengers,
int topSpeed,
int numberOfWheels,
std::string color = "red");

virtual ~Vehicle();

virtual std::string getColor();

virtual int getTopSpeed();

virtual int getNumberOfWheels();

virtual int getNumberOfPassengers();

virtual int getSafetyRating() = 0;

protected:
int m_numberOfPassengers;
int m_topSpeed;
int m_numberOfWheels;
std::string m_color;
};
}

#endif // VEHICLE_H

机动车.h

#ifndef MOTORVEHICLE_H
#define MOTORVEHICLE_H

#include "vehicle.h"

namespace vehicle
{
class MotorVehicle : public Vehicle
{
public:
MotorVehicle(int numberOfPassengers,
int topSpeed,
int numberOfWheels,
double kilometresPerLitre);

MotorVehicle(int numberOfPassengers,
int topSpeed,
int numberOfWheels,
std::string color,
double kilometresPerLitre);

virtual ~MotorVehicle();

virtual double getKilometresPerLitre();

protected:
double m_kmpl;
};
}

#endif // MOTORVEHICLE_H

汽车.h

#ifndef CAR_H
#define CAR_H

#include "motorvehicle.h"

namespace vehicle
{
class Car : public MotorVehicle
{
public:
Car(int numberOfPassengers,
int topSpeed,
double kilometresPerLitre,
int numberOfAirBags = 2,
bool abs = true,
int numberOfWheels = 4);

Car(int numberOfPassengers,
int topSpeed,
double kilometresPerLitre,
std::string color,
int numberOfAirBags = 2,
bool abs = true,
int numberOfWheels = 4);

virtual ~Car();

virtual int getNumberOfAirBags();

virtual bool hasAutomaticBreakingSystem();

protected:
int m_numberOfAirBags;
int m_abs;
};

}

#endif // CAR_H

汽车.cpp

#include "car.h"
using namespace vehicle;

Car::Car(int numberOfPassengers,
int topSpeed,
double kilometresPerLitre,
int numberOfAirBags,
bool abs,
int numberOfWheels) :
MotorVehicle(numberOfPassengers, topSpeed, numberOfWheels, kilometresPerLitre),
m_numberOfAirBags(numberOfAirBags),
m_abs(abs)
{

}
Car::Car(int numberOfPassengers,
int topSpeed,
double kilometresPerLitre,
std::string color,
int numberOfAirBags,
bool abs,
int numberOfWheels):
MotorVehicle(numberOfPassengers, topSpeed, numberOfWheels,color, kilometresPerLitre),
m_numberOfAirBags(numberOfAirBags),
m_abs(abs)
{

}

Car::~Car()
{

}

int Car::getNumberOfAirBags()
{
return m_numberOfAirBags;
}

bool Car::hasAutomaticBreakingSystem()
{
return m_abs;
}

int Car::getSafetyRating()
{
int SafetyRating = 0;
if (m_numberOfAirBags >= 4)
{
SafetyRating += 3;
}
else if (m_numberOfAirBags >= 2)
{
SafetyRating += 2;
}
else if (m_numberOfAirBags > 0)
{
SafetyRating += 1;
}

if (m_abs)
{
SafetyRating += 2;
}
return SafetyRating;
}

最佳答案

您的 car 类没有在 .h 文件中声明 getSafetyRating,而 vehicle 中的纯虚函数需要它。当您声明纯虚拟的东西时,即 func() = 0,您基本上是说任何从它继承的类都必须实现这个函数。因此机动车类和汽车类都必须至少声明 getSafetyRating 函数。

应该解决这个问题的一件事是将其添加到机动车中:虚拟 int getSafetyRating() = 0;

并在car.h中写入虚拟 int getSafetyRating()

关于C++ 外联定义纯虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35892767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com