如何修复C++编译错误C3867:判断指针是否为vector最后元素时报错
错误原因
- 你的代码错误混用了
std::vector的at()成员函数调用语法和下标访问语法:at()成员函数要求传入圆括号包裹的整数下标,你错误使用了方括号包裹my_vector.size() - 1作为参数- 编译器无法识别该错误语法,因此抛出两个报错:误将
at识别为成员函数指针要求你加取地址符,同时认为方括号作用在了非数组/指针类型上触发语法错误
- 额外注意:所有获取vector末尾元素的写法,都需要提前保证vector不为空,否则会触发越界异常或者未定义行为。
修复方案
你可以选择以下任意一种写法实现需求:
- 保留
at()调用,将参数改为圆括号包裹:
if( my_pointer == my_vector.at(my_vector.size() - 1) )
该写法会自动做下标越界检查,下标非法时会抛出std::out_of_range异常。
- 直接使用下标运算符访问,不需要调用
at():
if( my_pointer == my_vector[my_vector.size() - 1] )
该写法没有越界检查,性能更高,需要你自行保证vector非空且下标合法。
- (C++11及以上版本推荐)直接调用
back()成员函数获取末尾元素,代码更简洁:
if( my_pointer == my_vector.back() )
该写法同样没有越界检查,需要保证vector非空。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

