我有4个文件car.cpp,car.h,motorvehicle.h和vehicle.h。我在QT创建者环境中编程。

我遇到的问题是:

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

这是可供参考的程序文件,我是学习c ++的新手,非常感谢您的帮助!干杯亚历克斯。如有任何问题,我会提前致歉。

车辆

#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


机动车

#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




#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


car.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;
}

最佳答案

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

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

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

10-06 10:51