没有匹配函数来调用运算符 ++ 重载

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?