如何修改[Error] assignment of member 'Student::average' in read-only object
时间: 2024-02-18 09:06:25 浏览: 20
这个错误提示是因为 `average` 属性被定义为了 `const` 类型,无法在常量对象上进行赋值操作。在代码中,可能是在一个 `const` 对象上调用了修改 `average` 属性的函数,导致了这个错误。
要修复这个错误,需要检查代码,确保在常量对象上不会调用修改成员变量的函数。如果确实需要在常量对象上调用这些函数,可以将这些函数声明为 `mutable`,表示它们可以修改对象的属性,例如:
```
class Student {
public:
// ...
double average_score() const {
int sum = 0;
for (int i = 0; i < 6; i++) {
sum = sum + scores[i];
}
average = sum / 6.0; // 错误:不能在常量对象上修改属性
return average;
}
private:
// ...
mutable double average; // 将 average 声明为 mutable
};
```
这样就可以在常量对象上调用 `average_score()` 函数来计算平均分数,而不会产生上述错误。
相关问题
assignment of member 'flash_info' in read-only object
引用\[1\]:这个警告是由于在C90标准中,不允许在代码和声明之间混合使用。\[1\]引用\[2\]:在你的代码中,你将at()方法修改为了\[\]操作符,这样程序就可以正常运行了。\[2\]引用\[3\]:在你之前的代码中,你遇到了一个问题,即在一个只读对象中对成员进行赋值。\[3\]
根据你提供的代码和问题,我可以看出你在构造函数中创建了一个QList,并将QPair插入到其中。然后,你尝试使用at()方法来访问QList中的元素,并对其成员进行赋值。然而,由于at()方法返回的是一个只读对象,所以你无法对其成员进行赋值,导致出现了报错。
解决这个问题的方法是使用\[\]操作符来访问QList中的元素,这样就可以对其成员进行赋值而不会出现报错。通过将代码中的list.at(0).second.m_num = 102;修改为list\[0\].second.m_num = 102;,你可以成功地对成员进行赋值。\[2\]
总结起来,你遇到的问题是由于对只读对象的成员进行赋值所导致的报错。通过使用\[\]操作符来访问QList中的元素,你可以解决这个问题。
#### 引用[.reference_title]
- *1* [新路程------ 编译遇错](https://blog.csdn.net/u013308744/article/details/78928887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [assignment of member ‘QPair,Data*>::second“ in read-only object](https://blog.csdn.net/TianYanRen111/article/details/119570280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
Qt报错 error: assignment of read-only variable 'points'
这个错误通常是因为你尝试修改一个常量变量。在Qt中,常量变量通常使用const关键字来声明。当你尝试修改一个const变量时,就会出现这个错误。
下面是一个示例代码,演示了如何使用const变量:
```
#include <iostream>
using namespace std;
int main()
{
const int SIZE = 5;
int points[SIZE] = {1, 2, 3, 4, 5};
for (int i = 0; i < SIZE; i++)
{
cout << points[i] << " ";
}
// 错误:试图修改常量变量
// points[0] = 10;
return 0;
}
```
这个程序声明了一个常量变量SIZE,并将其用于定义一个大小为5的整型数组points。在输出points数组的值之后,程序尝试修改points[0]的值,但是这会导致编译器报出"assignment of read-only variable 'points'"错误。
如果你想修改数组中的值,你需要将其声明为非const变量。