error C2105: “++”需要左值

hepeng741201554 2012-09-30 01:02:51
void StackOfIntegers::push(int value)
{
elements[(elements.size())++] = value;
}
error C2105: “++”需要左值
这个什么原因啊?
...全文
1134 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2012-10-10
  • 打赏
  • 举报
回复
++左边的那个变量需要可以被修改,不能是const类型的,很不巧的是lements.size()返回值就是const类型
audi2 2012-10-10
  • 打赏
  • 举报
回复
1++;

编译失败,楼主会奇怪吗?
juniorli 2012-10-09
  • 打赏
  • 举报
回复



lements.size()这个返回的一个常量,而++不能修改常量。
嗯。
卖萌de猫 2012-09-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用楼主 的回复:
void StackOfIntegers::push(int value)
{
elements[(elements.size())++] = value;
}
error C2105: “++”需要左值
这个什么原因啊?


lements.size()这个返回的一个常量,而++不能修改常量。
[/Quote]正解,看看楼主写的size函数是否返回的是右值吧
wenhong609 2012-09-30
  • 打赏
  • 举报
回复
elements.size()返回的是一个临时对象,临时对象时const属性的,不能在const属性上进行++运算!
franzhong 2012-09-30
  • 打赏
  • 举报
回复
把这点提出来,不可以把东西赋给一个东西,给他是时候他自身还要++的,没意义
firendlys 2012-09-30
  • 打赏
  • 举报
回复
不考虑编译器这个 “error C2105: “++”需要左值” 是什么意思,单独从你的代码上考虑:

(elements.size())++ ;
这句话你想做什么呢? 想令 elements 里面的元素个数的值(假如命名为 _size 吧) 加1 吗?
但是,elements里面加入有 _size 这个值,但是这个值并不能主动增加或减少,只能在你插入或删除元素的时候自动增减,换句话说,对于外部来说,它是只读的。

那么,你这个增加size想法本身就是错误的。

现在,假如忽略我上面提到的只读问题,再假设,上面的 _size 这个值是可以读写的.
但是 elements.size() 这个函数的返回值是一个整数,注意,这个数值本身和 elements 里面的 _size 是完全独立的.
就算你对这个返回的值进行 ++ , 也只是这个返回值本身的 +1 ,但对 elements 本身的 _size 是毫无影响的.

最后,就是, 这个 elements.size() 返回值 本身是 const 的,就是说是无法++ 的.
"error C2105: “++”需要左值" 出现的原因就是 const 的值无法被修改.
而这个只是属于语法错误而已,最主要的是前面我提到的2种假设通过的情况是有问题的.
就是说,你的这个思路本身就有问题,而不仅仅是语法上有问题....
漫步者、 2012-09-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
void StackOfIntegers::push(int value)
{
elements[(elements.size())++] = value;
}
error C2105: “++”需要左值
这个什么原因啊?
[/Quote]

lements.size()这个返回的一个常量,而++不能修改常量。
自信男孩 2012-09-30
  • 打赏
  • 举报
回复
++不可以作为左值,这是编译器的规定。
mujiok2003 2012-09-30
  • 打赏
  • 举报
回复
标准5.3.2.1:
The operand of prefix ++ is modified by adding 1, or set to true if it is bool (this use is deprecated). The operand shall be a modifiable lvalue.


mujiok2003 2012-09-30
  • 打赏
  • 举报
回复
返回值为引用类型的函数调用为左值


size_t& Containter::size()
{
//...
}

size_t Containter::size() const
{
//...
}

65,180

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧