为什么我收到 [Error] no matching function for call to 'car::car()'
why i m getting [Error] no matching function for call to 'car::car()'
我用两个成员变量 a 和 b 创建了 class car 的两个对象....我想创建一个新对象,其 a 和 b 是对象的 a 和 b 的乘积我之前创建的。
#include<iostream>
using namespace std;
class car
{
private:
int a,b;
public:
car(int x,int y)
{
a=x;
b=y;
}
void showdata()
{
cout<<a<<" "<<b<<endl;
}
car add(car c) // to multiply 'a' and 'b' of both objects and assigning to a new
object
{
car temp; // new object of class car
temp.a = a*c.a;
temp.b = b*c.b;
return temp;
}
};
int main()
{
car o1(3,5);
car o2(0,7);
car o3;
o3=o1.add(o2);
o1.showdata();
o2.showdata();
o3.showdata();
}
查看此文档。
https://en.cppreference.com/w/cpp/language/default_constructor
由此可见,如果您定义另一个构造函数,默认构造函数不会自动添加到您的 class。你做了什么。
您将必须手动添加默认构造函数。例如
class car
{
public:
car() = default;
....
private:
int a = 0;
int b = 0;
}
要添加到@Pepijn Kramer 的答案中的另一件事是,您可以执行以下操作作为替代方案
class car
{
public:
//note. The call of default constructor
//is now converted to the call car(a_default, b_default)
car(int x=a_default, int b=b_default)
{
//whatever
}
.......
.......
private:
int a = 0;
int b = 0;
}
另请注意,此变体有一个缺点,您可以将 car::car
称为
Car car(10);
将转换为
Car car(10,b_default);
这可能不适合您的选择。如果没有,您应该坚持使用其他变体。
我用两个成员变量 a 和 b 创建了 class car 的两个对象....我想创建一个新对象,其 a 和 b 是对象的 a 和 b 的乘积我之前创建的。
#include<iostream>
using namespace std;
class car
{
private:
int a,b;
public:
car(int x,int y)
{
a=x;
b=y;
}
void showdata()
{
cout<<a<<" "<<b<<endl;
}
car add(car c) // to multiply 'a' and 'b' of both objects and assigning to a new
object
{
car temp; // new object of class car
temp.a = a*c.a;
temp.b = b*c.b;
return temp;
}
};
int main()
{
car o1(3,5);
car o2(0,7);
car o3;
o3=o1.add(o2);
o1.showdata();
o2.showdata();
o3.showdata();
}
查看此文档。 https://en.cppreference.com/w/cpp/language/default_constructor
由此可见,如果您定义另一个构造函数,默认构造函数不会自动添加到您的 class。你做了什么。 您将必须手动添加默认构造函数。例如
class car
{
public:
car() = default;
....
private:
int a = 0;
int b = 0;
}
要添加到@Pepijn Kramer 的答案中的另一件事是,您可以执行以下操作作为替代方案
class car
{
public:
//note. The call of default constructor
//is now converted to the call car(a_default, b_default)
car(int x=a_default, int b=b_default)
{
//whatever
}
.......
.......
private:
int a = 0;
int b = 0;
}
另请注意,此变体有一个缺点,您可以将 car::car
称为
Car car(10);
将转换为
Car car(10,b_default);
这可能不适合您的选择。如果没有,您应该坚持使用其他变体。