You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复C++编译错误C3867:判断指针是否为vector最后元素时报错

错误原因
  • 你的代码错误混用了std::vector的at()成员函数调用语法和下标访问语法:
    • at()成员函数要求传入圆括号包裹的整数下标,你错误使用了方括号包裹my_vector.size() - 1作为参数
    • 编译器无法识别该错误语法,因此抛出两个报错:误将at识别为成员函数指针要求你加取地址符,同时认为方括号作用在了非数组/指针类型上触发语法错误
  • 额外注意:所有获取vector末尾元素的写法,都需要提前保证vector不为空,否则会触发越界异常或者未定义行为。
修复方案

你可以选择以下任意一种写法实现需求:

  1. 保留at()调用,将参数改为圆括号包裹:
if( my_pointer == my_vector.at(my_vector.size() - 1) )

该写法会自动做下标越界检查,下标非法时会抛出std::out_of_range异常。

  1. 直接使用下标运算符访问,不需要调用at():
if( my_pointer == my_vector[my_vector.size() - 1] )

该写法没有越界检查,性能更高,需要你自行保证vector非空且下标合法。

  1. (C++11及以上版本推荐)直接调用back()成员函数获取末尾元素,代码更简洁:
if( my_pointer == my_vector.back() )

该写法同样没有越界检查,需要保证vector非空。


内容的提问来源于stack exchange,提问作者Igor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:24:02