我正在构建一个可以创建车辆特征的类,我在尝试在控制台上显示autovehicle a1时遇到了一些困难。我得到一个我无法解释的错误。请尽可能帮助
#include <iostream>
using namespace std;
class Autovehicle {
private:
//registry number
char * car_registration_number;
char engine;
int engine_cc;
int avg_consumption;
int avg_speed;
int avg_consumption_urban;
int avg_speed_urban;
int max_speed;
static int number_of_autovehicles;
public:
//getters
char * get_car_registration_number() {
return this->car_registration_number;
}
char get_engine()
{
return this->engine;
}
int get_engine_cc() {
return this->engine_cc;
}
int get_avg_consumption() {
return this->avg_consumption;
}
int get_avg_speed() {
return this->avg_speed;
}
int get_avg_consumption_urban() {
return this->avg_consumption_urban;
}
int get_avg_speed_urban() {
return this->avg_speed_urban;
}
int get_max_speed() {
return this->max_speed;
}
static int get_number_of_cars() {
return number_of_autovehicles;
}
//setters
void set_car_registration_number(char *car_reg_nr) {
this->car_registration_number = car_reg_nr;
}
void set_engine(char eng) {
this->engine = eng;
}
void set_engine_cc(int eng_cc) {
this->engine_cc = eng_cc;
}
void set_avg_consumption(int avg_cons) {
this->avg_consumption = avg_cons;
}
void set_avg_speed(int avg_spd) {
if (this->avg_speed > avg_spd)
cout << endl << "You should probably slow down";
this->avg_speed = avg_spd;
}
void set_avg_consumption_urban(int avg_cons_urb) {
this->avg_consumption_urban = avg_cons_urb;
}
void set_avg_speed_urban(int avg_spd_urb) {
if (this->avg_speed_urban > avg_spd_urb)
cout << endl << "You should probably slow down";
this->avg_speed_urban = avg_spd_urb;
}
void set_max_speed(int max_spd) {
this->max_speed = max_spd;
}
//default constructor
Autovehicle(){
number_of_autovehicles++;
this->car_registration_number = new char[strlen("There are no autovehicles") + 1];
strcpy(this->car_registration_number, "There are no autovehicles");
this->engine = NULL;
this->engine_cc = 0;
this->avg_consumption = 0;
this->avg_speed = 0;
this->avg_consumption_urban = 0;
this->avg_speed_urban = 0;
this->max_speed = 0;
}
//constructor
Autovehicle(char* car_reg_nr, char eng, int eng_cc, int avg_cons, int avg_spd, int avg_cons_urb, int avg_spd_urb, int max_spd){
number_of_autovehicles++;
this->car_registration_number = new char[strlen(car_reg_nr) + 1];
strcpy(this->car_registration_number, car_reg_nr);
this->engine = eng;
this->engine_cc = eng_cc;
this->avg_consumption = avg_cons;
this->avg_speed = avg_spd;
this->avg_consumption_urban = avg_cons_urb;
this->avg_speed_urban = avg_spd_urb;
this->max_speed = max_spd;
}
//destructor
~Autovehicle() {
delete[]this->car_registration_number;
number_of_autovehicles--;
}
};
这是void main,问题开始的地方:
void main() {
Autovehicle a1( "Engniasd", "gasoline", 1980, 11, 50, 8, 100) {
cout<<"registration number: "<< this->car_registration_number;
cout << "engine: " << this->engine;
cout << "engine cc:" << this->engine_cc;
cout << "consumption: " << this->avg_consumption;
cout << "avg speed: " << this->avg_speed;
cout << "urban consumption: " << this->avg_consumption_urban;
cout << "urban speed " << this->avg_speed_urban;
}
}
当我试图显示Autovehicle a1(Engniasd,第一个术语)时,我得到的问题是“没有构造函数的实例匹配参数列表”
答案 0 :(得分:1)
尝试将注册号添加到您的汽车和车辆数量:
Autovehicle a1(&#34; REG12345&#34; ,&#34;汽油&#34;,1980,11,50,8,100,50, 3 )。
答案 1 :(得分:1)
您的构造函数将eng
定义为char
,但您传递的是"gasoline"
const char*
。
此外,将车辆登记号码存储为char*
。让您的生活更轻松,并使用std::string
代替。这样,您和您的类用户就不必担心管理指针的生命周期。
并且,在main
中,您已声明了一个名为a1
的变量,但看起来您正试图使用this
调用方法。您需要调用实例变量:
cout << "engine: " << a1.engine;
您还需要使用分号终止a1
声明,并且不需要大括号,例如:
Autovehicle a1( "Engniasd", "gasoline", 1980, 11, 50, 8, 100);
cout << "registration number: "<< a1.car_registration_number;
答案 2 :(得分:0)
在学校atm并且无法好好看看这个,但是看看你的构造函数,你有第二个参数的char而不是char ptr。你不能隐式地将char转换为const char *,你可以char * - &gt; const char *,所以将你的第二个参数改为char *。另外,将void main()更改为int main(),main应该是int(ansi标准),并且许多编译器可能不接受使用void main()。
答案 3 :(得分:0)
我看到了几个问题。
你能解释为什么car_registration_number和引擎有不同的类型吗?
如果您可以自己回答这个问题,可以解决一个问题。
此外,您应该将类声明与实现分开,并确保初始化所有变量。包括静态的。
答案 4 :(得分:0)
调用构造函数的问题
Autovehicle(char* , char , int, int, int, int, int, int)
第二个参数是char,但是你传递char *,构造函数也有6个int参数,但是你只传递了5个。并且您无法以自己的方式打印对象的值。在课堂上创建功能
void print()
{
cout<<"registration number: "<< this->car_registration_number;
cout << "engine: " << this->engine;
cout << "engine cc:" << this->engine_cc;
cout << "consumption: " << this->avg_consumption;
cout << "avg speed: " << this->avg_speed;
cout << "urban consumption: " << this->avg_consumption_urban;
cout << "urban speed " << this->avg_speed_urban;
}
并在main()中将其称为
Autovehicle a1( "Engniasd", "gasoline", 1980, 11, 50, 8, 100, 0);
a1.print();