没有匹配函数来调用运算符 ++ 重载
No matching function for to call operator ++ overloading
我试图在我的 class 中超载增量 operator++
但它告诉我
没有调用 person::person(int&)
.
的匹配函数
错误出现在第22行
这是我的头文件
#include <string>
class person
{
private:
std::string name;
int age;
public:
//Setters
void set_name(std::string name_set);
void set_age(int age_set);
//Getters
std::string get_name();
int get_age();
//Constructors & Destructor (Overloaded Constructor)
person();
person(std::string ini_name,int ini_age);
//Operator Overloading
person operator ++(int)
{
age++;
return person(age);
}
};
这里是cpp文件
#include "person.h"
//Setters Definition
void person::set_name(std::string name_set){name = name_set;}
void person::set_age(int age_set){age = age_set;}
//Getters Definition
std::string person::get_name(){return name;}
int person::get_age(){return age;}
//Constructors & Destructor (Overloaded Constructor)
person::person(){name = "Null",age = 0;}
person::person(std::string ini_name,int ini_age):
name(ini_name),age(ini_age)
{}
后缀增量应该增加 this
和 return 增量之前的值。您收到错误是因为 person
没有采用 int
的构造函数。您可以通过以下方式解决该问题:
person operator++(int)
{
person temp{name,age};
age++;
return temp;
}
虽然更好的方法是提供一个复制构造函数,并且通常可以根据前缀增量来实现后缀增量:
// prefix
person& operator++() {
age++;
return *this;
}
// postfix
person operator++(int) {
person temp = *this; // needs copy constructor
++*this;
return temp;
}
有关运算符重载的更多详细信息,请参阅 What are the basic rules and idioms for operator overloading?
我试图在我的 class 中超载增量 operator++
但它告诉我
没有调用 person::person(int&)
.
错误出现在第22行 这是我的头文件
#include <string>
class person
{
private:
std::string name;
int age;
public:
//Setters
void set_name(std::string name_set);
void set_age(int age_set);
//Getters
std::string get_name();
int get_age();
//Constructors & Destructor (Overloaded Constructor)
person();
person(std::string ini_name,int ini_age);
//Operator Overloading
person operator ++(int)
{
age++;
return person(age);
}
};
这里是cpp文件
#include "person.h"
//Setters Definition
void person::set_name(std::string name_set){name = name_set;}
void person::set_age(int age_set){age = age_set;}
//Getters Definition
std::string person::get_name(){return name;}
int person::get_age(){return age;}
//Constructors & Destructor (Overloaded Constructor)
person::person(){name = "Null",age = 0;}
person::person(std::string ini_name,int ini_age):
name(ini_name),age(ini_age)
{}
后缀增量应该增加 this
和 return 增量之前的值。您收到错误是因为 person
没有采用 int
的构造函数。您可以通过以下方式解决该问题:
person operator++(int)
{
person temp{name,age};
age++;
return temp;
}
虽然更好的方法是提供一个复制构造函数,并且通常可以根据前缀增量来实现后缀增量:
// prefix
person& operator++() {
age++;
return *this;
}
// postfix
person operator++(int) {
person temp = *this; // needs copy constructor
++*this;
return temp;
}
有关运算符重载的更多详细信息,请参阅 What are the basic rules and idioms for operator overloading?