[ad_1]
Est-ce le programme de solution approprié à la question, sinon quels changements doivent être apportés, veuillez le dire.
Ce programme affiche 2 erreurs, pourquoi ?
erreur : le champ « myVehicle » contient un type de véhicule incomplet [9]
remarque : la définition de « véhicule de classe » n’est pas complète avant l’accolade fermante
Dans la fonction membre ‘void Vehicle::valid_mileage (int)’
erreur : une définition de fonction n’est pas autorisée ici avant le jeton ‘{‘
Ce que j’ai essayé :
#ifndef VEHICLE_H #define VEHICLE_H #include <iostream> #include <fstream> #include <iomanip> #include <functional> #include <algorithm> #include <string> #include <cstdlib> #include <sstream> using namespace std; //Vehicle Class class Vehicle { protected: Vehicle myVehicle[9]; string make; //make string model; // model string color; // color int year; // year int mileage; // miles on car string type; //Type of vehicle public: //Constructor that will set information for a new car void New_vehicle (string a, string b, string c, int d, int e) {make = a; model = b; color = c; year = d; mileage = e;} Vehicle(); //Default constructor Vehicle(string, string, string, int, int, string); //mutator and accessor functions void setMake(string); void setModel(string); void setColor(string); void setYear(int); void setMileage(int); void setType(string); string getMake(); string getModel(); string getColor(); int getYear(); int getMileage(); string getType(); //Check mileage to see if valid void valid_mileage(int); //virtual function virtual void details() { } }; //Sets to default values Vehicle::Vehicle() { make = " "; model = " "; color = " "; year = 0; mileage = 0; type = " "; } Vehicle::Vehicle(string make, string model, string color, int year, int mileage, string type) { Vehicle::make = make; Vehicle::model = model; Vehicle::color = color; Vehicle::year = year; valid_mileage(mileage); Vehicle::type = type; } void Vehicle::setMake(string make) { Vehicle::make = make; } void Vehicle::setModel(string model) { Vehicle::model = model; } void Vehicle::setColor(string color) { Vehicle::color = color; } void Vehicle::setYear(int year) { Vehicle::year = year; } void Vehicle::setMileage(int mileage) { valid_mileage(mileage); } void Vehicle::setType(string type) { Vehicle::type = type; } string Vehicle::getMake() { return make; } string Vehicle::getModel() { return model; } string Vehicle::getColor() { return color; } int Vehicle::getYear() { return year; } int Vehicle::getMileage() { return mileage; } string Vehicle::getType() { return type; } void Vehicle::valid_mileage(int mileage) { if (mileage>=0) Vehicle::mileage=mileage; else { Vehicle::mileage=0; cout << "WARNING! You have entered invalid mileage!\n"; } Vehicle& getVehicle(int n) { return myVehicle[n]; } }; #endif
Solution 1
Vous avez des accolades fermantes parasites et manquantes.
Il y en a un supplémentaire après la définition de details
il en manque à la fin de valid_mileage
et ainsi de suite.
C’est l’une des raisons pour lesquelles je déteste le système 1 To : il est beaucoup plus difficile de faire correspondre les supports lorsqu’ils sont au mauvais endroit, car l’indentation automatique ne fonctionne pas…
Solution 2
Citation:Est-ce le bon programme de solution à la question
Non, ce n’est pas la solution : vous fournissez uniquement le Vehicle
classe, vous devez également fournir à la fois le Car
et le Bike
classe.
De plus, quel est le but de la gamme de Vehicle
s dans le Vehicle
classe? Quel est le but du type
membre de données ?
Essayez de limiter le nombre de détails au minimum et de fournir la hiérarchie de classes requise.
Solution 3
La première erreur provient d’ici :
class Vehicle { protected: Vehicle myVehicle[9]; // ... };
Vous ne pouvez pas utiliser une instance de classe en tant que membre de sa propre classe.
error:field 'myVehicle' has incomplete type vehicle [9] note: definition of 'class vehicle' is not complete until closing brace
La classe n’est pas définie à ce stade, de sorte que le compilateur ne sait pas comment la gérer.
La deuxième erreur provient du bloc de code
Vehicle& getVehicle(int n) { return myVehicle[n]; }
dans ton valid_mileage()
fonction. Il semble qu’il ait été copié et collé au mauvais endroit.
Notez également que ::
est l’opérateur de résolution de portée pour les espaces de noms et pour accéder aux membres statiques d’une classe. Pour accéder aux membres non statiques d’une classe lorsque le nom du membre est également utilisé comme paramètre, utilisez le ce pointeur – cppreference.com[^]:
void Vehicle::setMake(string make) { this->make = make; }
Solution 6
Voiture de classe de base
Classe dérivée
Ferrari : Vitesse 10 000 km/h
Honda : Vitesse 10 200 km/h
Toyota : Vitesse 15 000 km/h
Solution 7
Voiture de classe de base
Classe dérivée
Vitesse Ferrari 10 000 km/h
Vitesse Honda 10200 km/h
Vitesse Toyota 15 000 km/h
[ad_2]
コメント