没有用于调用classname :: constructor的匹配函数

时间:2014-05-17 13:04:35

标签: c++

class Transport{
private:
    int weight; // Member variable (Private)
    int capacity; // Member variable (Private)
    int speed; // Member variable (Private)
public:
    Transport(int aWeight, int aCapacity, int aSpeed) { // Default constructor
        if(aWeight > 0) { // Perform validation at the time of creating object
            weight = aWeight;
        } else {
            weight = 0;
        }

        if(aCapacity > 0) { // Perform validation at the time of creating object
            capacity = aCapacity;
        } else {
            capacity = 0;
        }

        if(aSpeed > 0) { // Perform validation at the time of creating object
            speed = aSpeed;
        } else {
            speed = 0;
        }
    }
    void carryGoods(); // Member function (Public) -> Each transport has carrying goods functionality.

};

class LandTransport : public Transport{ // Inherit transport class
private:
    char * transportationMode; // Member variable (Private)
    char * vehicleType; // Member variable (Private)
public:
    LandTransport(char * aTransporationMode, char * aVehicleType) {
        transportationMode = new char[strlen(aTransporationMode)+1];
        strcpy(transportationMode, aTransporationMode);

        vehicleType = new char[strlen(aVehicleType)+1];
        strcpy(vehicleType, aVehicleType);
    }
};

你能描述一下,这里有什么问题,最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

您的派生类有一个构造函数,它不提供其父构造函数的参数。

LandTransport(char * aTransporationMode, char * aVehicleType)

应如下所示(例如):

LandTransport(char * aTransporationMode, char * aVehicleType) : Transport(0,0,0)
                                                              ^^^^^^^^^^^^^^^^^^