अभिभावक वर्ग वाहन है, बाल वर्ग कार है। सभी कंस्ट्रक्टरों के लिए इनिशियलाइज़र सूची का उपयोग करना है जो मेरे लिए एक चुनौती साबित हो रही है। मेरे पास वर्तमान में जो कुछ है उसके लिए मुझे निम्न त्रुटि मिलती रहती है:

car.cpp:7:1: error: redefinition of 'Car::Car()'
Car::Car()
^
In file included from car.cpp:3:0:
car.h:12:5: note: 'Car::Car()' previously defined here
     Car() : Vehicle("NoID", -1, "NoMake", "NoModel", "NoColor") {}
     ^

एक नौसिखिए के रूप में मैं बुनियादी आरंभीकरण सूचियों से थोड़ा परिचित हूं, लेकिन जब बाल कक्षाओं में उनका उपयोग करने की बात आती है। यदि यह स्पष्ट रूप से स्पष्ट नहीं था तो यह एक असाइनमेंट के लिए है; मैं केवल उपरोक्त त्रुटि का निदान करने में सहायता की तलाश में हूं, पूर्ण समाधान नहीं।

वाहन.एच

#ifndef VEHICLE_H
#define VEHICLE_H

#include <iostream>
#include <string>
using namespace std;

class Vehicle
{
protected:
    /* Each of these data item represent something any type of vehicle
    will have, so it makes sense these would be in the base class. */

    // added a parent constructor so child classes can use
    // these variables in initializer list
    Vehicle(string id, int year, string make, string model,
            string color) : id(id), year(year), make(make),
                            model(model), color(color) {}
    string id;
    int year;
    string make;
    string model;
    string color;

public:
    Vehicle();
    // Vehicle(string id, int year, string make, string model, string color);
    Vehicle(ifstream &infile);
    // virtual ~Vehicle();
    string getID();
    void setID(string ID);
    virtual void printInfo(ofstream &out);
};

#endif

car.h

#ifndef CAR_H
#define CAR_H

#include <iostream>
#include <string>
#include "vehicle.h"
using namespace std;

class Car : public Vehicle
{
private:
    Car() : Vehicle("NoID", -1, "NoMake", "NoModel", "NoColor") {}
    int doors;
    string paymentType;

public:
    // Car();
    Car(string id, int year, string make, string model, string color, int doors, 
string paymentType);
    Car(ifstream &infile);

    int getDoors();
    void setDoors(int numdoors);

    string getPaymentType();
    void setPaymentType(string pt);

    void printInfo(ofstream &out);
};

#endif

car.cpp

#include <iostream>
#include <string>
#include "car.h"
#include "vehicle.h"
using namespace std;

Car::Car()
{
    // default constructor initialization list?
}

Car::Car(string id, int year, string make, string model,
         string color, int doors, string paymentType)
{
    // parameterized constructor
}

Car::Car(ifstream &infile)
{
    // regular constructor i think
}

int Car::getDoors()
{
    return doors;
}

void Car::setDoors(int numdoors)
{
    doors = numdoors;
}

string Car::getPaymentType()
{
    return paymentType;
}

void Car::setPaymentType(string pt)
{
    paymentType = pt;
}

void Car::printInfo(ofstream &out)
{
// unfinished
} 
1
coolguysyndrome 16 अप्रैल 2020, 21:48

1 उत्तर

सबसे बढ़िया उत्तर

आपने यहां अपना कंस्ट्रक्टर और परिभाषित घोषित किया है

Car() : Vehicle("NoID", -1, "NoMake", "NoModel", "NoColor") {}

इसलिए, cpp फ़ाइल में परिभाषा दूसरी परिभाषा है, जो अवैध है

Car::Car()
{
    // default constructor initialization list?
}

यदि आप कार्यान्वयन को सीपीपी फ़ाइल में ले जाना चाहते हैं, तो हेडर को केवल घोषणा के लिए बदलें

// car.h
class Car : public Vehicle
{
    Car();
    ...
};

// car.cpp
Car::Car()
: Vehicle("NoID", -1, "NoMake", "NoModel", "NoColor")
{
    // default constructor initialization list?
}
0
Cory Kramer 16 अप्रैल 2020, 18:51