为了在一个简单的数组中检查相等性,我有以下内容;

int a[4] = {9,10,11,20};
    if(a[3]== 20){
        cout <<"yes"<< endl;
    }

但是,当我创建一个类型为class的数组,并尝试检查是否相等时,会出现错误;


void Animal::allocate(Human h){
    for (int i =0; i<20; i++){
        if(humanArray[i] == h){
            for(int j = i; j<size; j++){
                humanArray[j] = humanArray[j +1];
            }
        }
    }
}

我收到以下错误;
error: no match for 'operator==' in '((Animal*)this)->Animal::humanArray[i] == h'|

我可以传递索引和Human,然后检查索引号。但是,有没有一种方法可以检查两个元素是否相同?我不希望将“人名”与人名对照,因为在某些地方我的人不会有名字。

最佳答案

为了使语法

if(humanArray[i] == h)

合法,则需要为您的人类类定义operator==。为此,您可以编写一个如下所示的函数:
bool operator== (const Human& lhs, const Human& rhs) {
   /* ... */
}

在此函数中,您将对lhsrhs进行逐字段比较,以查看它们是否相等。从现在开始,每当您尝试使用==运算符比较任何两个人类时,C++都会自动调用此函数来进行比较。

希望这可以帮助!

07-24 09:19