#c #oop #parameters #constructor #default-constructor
#c #ооп #параметры #конструктор #default-конструктор
Вопрос:
Я объявляю один класс comp для добавления комплексных чисел, ошибка появляется при объявлении третьего объекта comp в функции add() ошибка: нет соответствующей функции для вызова ‘comp::comp()’
приведенный ниже код работает абсолютно нормально
class comp
{
float real;
float img;
public:
comp()
{
real=img=0;
}
comp(float a,float b)
{
real=a;
img=b;
}
void display()
{
cout<<real<<" "<<img<<"i"<<endl;
}
friend comp add(comp, comp);
};
В коде ударьте теперь, когда я прокомментировал конструктор по умолчанию
это приводит к ошибке
class comp
{
float real;
float img;
public:
/*comp()
{
real=img=0;
}*/
comp(float a,float b)
{
real=a;
img=b;
}
void display()
{
cout<<real<<" "<<img<<"i"<<endl;
}
friend comp add(comp, comp);
};
В приведенном ниже коде теперь, когда я инициализировал параметры в параметризованном конструкторе
это также работает абсолютно нормально
class comp
{
float real;
float img;
public:
comp(float a=0,float b=0)
{
real=a;
img=b;
}
void display()
{
cout<<real<<" "<<img<<"i"<<endl;
}
friend comp add(comp, comp);
};
Я вставляю код для функции add() ниже
comp add(comp c1, comp c2)
{
comp c3; //*The error pops up at this declaration*
c3.real=c1.real c2.real;
c3.img=c1.img c2.img;
return c3;
}
Комментарии:
1. Кажется, вы нашли ответ.
comp c3;
будет работать, только если есть конструктор, который можно вызвать без аргументов.2. Правильно. Вы написали
comp c3;
. Это вызывает конструктор без аргументов. Но нет конструктора без аргументов. Итак, он жалуется вам и говорит, что нет конструктора без аргументов.
Ответ №1:
Вы не «инициализируете параметры», вы объявляете функцию со значениями параметров по умолчанию. Это позволяет вызывать функцию без явной передачи чего-либо, поэтому она вызывается без параметров.