为何指针解引用调用begin/end时提示未声明?C++代码报错咨询
问题分析与解决
嘿,这个问题我太熟了!核心是C++的运算符优先级在搞鬼,你对解引用的理解没错,但写法上没注意优先级规则,才导致了报错。
先看你出错的那行代码:
if(std::find(*vectP.begin(),*vecP.end(),"ele0")!=*vectP.end())
你本来想的是“先解引用vectP拿到vector对象,再调用它的begin()/end()”,但在C++里,成员访问运算符.的优先级比解引用运算符*高得多!所以编译器会把*vectP.begin()解析成*(vectP.begin())——也就是试图让指针vectP直接调用begin()方法,但指针本身根本没有这个成员,自然会报“begin未被声明”的错误。另外你这里还打错了变量名:*vecP.end()里的vecP应该是vectP,这个小笔误也得修正。
给你两种正确的写法:
- 用括号强制改变优先级,先完成解引用:
if(std::find((*vectP).begin(), (*vectP).end(), "ele0") != (*vectP).end())
- 更简洁常用的方式:用指针专属的成员访问运算符
->,它就是(*指针).成员的语法糖,写起来更清爽:
if(std::find(vectP->begin(), vectP->end(), "ele0") != vectP->end())
这样就能正确调用vector的迭代器方法,完成查找操作啦。
内容的提问来源于stack exchange,提问作者McLaden
相关产品推荐
相关产品推荐

