passing ‘const Shape’ as ‘this’ argument of ‘virtual double Shape::Area()’ discards qualifiers
时间: 2023-09-21 08:03:25 浏览: 88
这个错误信息意味着你正在尝试在一个常量对象上调用一个非常量函数。换句话说,你正在尝试修改一个被声明为常量的对象。在这种情况下,编译器会拒绝这个操作并显示上述错误信息。
要解决这个问题,你需要使用 `const` 关键字来修饰函数,表示这个函数不会修改对象的状态。例如,如果你有一个名为 `Area()` 的函数,你可以将它声明为 `const` 函数:
```
double Area() const;
```
这样一来,即使你在一个常量对象上调用 `Area()` 函数,编译器也不会报错,因为它知道这个函数不会修改对象的状态。
相关问题
如何修改 [Error] passing 'const Student' as 'this' argument of 'double Student::average_score()' discards qualifiers [-fpermissive]
这个错误提示是因为 `average_score()` 函数没有加上 `const` 修饰符,而在 `operator>` 函数的实现中,使用了 `average_score()` 函数来获取当前对象的平均成绩,但是在 `operator>` 函数中,`this` 指针被隐式地转换为了 `const Student*`,因此编译器认为 `average_score()` 函数可能会修改 `this` 指针所指向的对象,导致了这个错误。
要修复这个错误,可以在 `average_score()` 函数定义中加上 `const` 修饰符,表示该函数不会修改对象的内容:
```
double average_score() const {
int sum = 0;
for (int i = 0; i < 6; i++) {
sum = sum + scores[i];
}
average = sum / 6.0;
return average;
}
```
这样就可以避免这个错误了。
error: passing ‘const Array’ as ‘this’ argument discards qualifiers [-fpermissive]
这个错误通常出现在你试图使用一个 const 对象调用一个非 const 的成员函数时。在 C++ 中,当你声明一个对象为 const 时,意味着你不能修改它的成员变量。因此,编译器会阻止你调用这个对象的非 const 成员函数,以保证对象的状态不被改变。
例如:
```
class MyClass {
public:
void modify() {
// do something to modify the object
}
void display() const {
// do something to display the object
}
};
int main() {
const MyClass obj;
obj.modify(); // Error: modifying a const object
obj.display(); // OK: const member function
return 0;
}
```
在上面的代码中,我们声明了一个 const 的 MyClass 对象 `obj`。因为 `obj` 是 const 的,所以我们不能调用它的非 const 成员函数 `modify()`,但我们可以调用它的 const 成员函数 `display()`。
如果你需要在 const 对象上调用非 const 成员函数,你可以将成员函数声明为 const。例如:
```
class MyClass {
public:
void modify() const {
// do something to modify the object
}
void display() const {
// do something to display the object
}
};
int main() {
const MyClass obj;
obj.modify(); // OK: const member function
obj.display(); // OK: const member function
return 0;
}
```
在上面的代码中,我们将 `modify()` 成员函数声明为 const,这样就可以在 const 对象上调用它了。
阅读全文