Overloaded 'operator%' must have at least one parameter of class or enumeration type
时间: 2024-02-18 07:00:18 浏览: 122
这个错误提示意味着在重载%运算符时,参数列表中至少要有一个类或枚举类型的参数。也就是说,%运算符只能用于两个类对象或枚举类型之间的运算。
例如,下面的代码定义了一个名为MyClass的类,并尝试重载%运算符:
```c++
class MyClass {
public:
int value;
// 重载%运算符
int operator%(int n) {
return value % n;
}
};
int main() {
MyClass obj;
obj.value = 10;
int result = obj % 3; // 编译错误,缺少类对象或枚举类型参数
return 0;
}
```
在这个例子中,由于重载的%运算符的参数列表中只有一个int类型的参数,没有类对象或枚举类型的参数,导致编译器无法识别这个运算符。要修复这个错误,可以将%运算符的参数列表中加入一个类对象或枚举类型的参数,例如:
```c++
class MyClass {
public:
int value;
// 重载%运算符
int operator%(const MyClass& other) {
return value % other.value;
}
};
int main() {
MyClass obj1, obj2;
obj1.value = 10;
obj2.value = 3;
int result = obj1 % obj2; // 正确调用重载的%运算符
return 0;
}
```
在这个例子中,重载的%运算符的参数列表中加入了一个const MyClass&类型的参数,使得可以对MyClass类型的对象进行取模运算。
阅读全文