【问题标题】:error: assignment of member ‘x::x’ in read-only object错误:在只读对象中分配成员“x::x”
【发布时间】:2019-09-24 06:19:02
【问题描述】:

我的代码有一些我无法解决的错误。有错误是:

错误:在只读对象中分配成员“Line::sum” 总和 = tmp;

错误:只读对象中成员“Line::number”的增量 数字++;

错误:将“Line&”类型的引用绑定到“const Line”会丢弃限定符 返回(*这个);

Line & Line :: operator += (const Info & new) const{

    Info * tmp = new Info[number+1];

    for (int p=0; p<number; p++) 
        tmp[p] = sum[p];    // Sin memoria dinámica

    tmp[num_paradas] = new;  // Sin memoria dinámica


    delete [] sum;

    sum = tmp;
    number++;

    return(*this);
}

【问题讨论】:

  • 除非你在做一些奇怪的事情,否则我相信operator+= 不应该是const。操作符的目的通常是修改它所调用的对象,所以拥有const没有意义。
  • new 是保留关键字。您不能将其用作标识符名称。

标签: c++ operator-overloading constants assignment-operator


【解决方案1】:

对于初学者(C++ 17 标准,5.10 标识符)

3 另外,有些标识符是保留给C++使用的 实现,不得以其他方式使用;没有诊断是 必填。

选择另一个标识符而不是单词new

其次,成员函数有限定符const

Line & Line :: operator += (const Info & new) const{
                                              ^^^^^

因此,如果未使用说明符mutable 声明,则相应对象的数据成员可能不会更改。

根据operator +=的逻辑,成员函数的声明应该不带限定符const

Line & Line :: operator += (const Info & new) {

【讨论】:

  • 我认为您的意思是指 5.11 关键字。引用的段落是指在标识符中使用下划线,而不是关键字。当关键字用作标识符而不是用于其正当目的时,需要进行诊断。根据 5.6 令牌,“标识符”和“关键字”似乎是不相交的类别。此外,由于这对某些读者来说可能并不明显,我认为最好明确指出 new 关键字是 OP 错误地尝试用作标识符的关键字。
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多