共享指针取消引用错误

Shared pointer dereferencing error

本文关键字:错误 引用 取消 指针 共享      更新时间:2023-10-16

这里的Java家伙试图让我了解C++,特别是共享的指针。我正在使用点云库来做一些表面工作。PCL 库包含IndicesPtr根据文档,它是std::vector上的共享指针

如何从指针访问矢量?我尝试取消引用

pcl::IndicesPtr sample(new std::vector<int>());
...
for (int i = 0; i < *sample.size(); i++) { ... }

根据此处的文档 https://theboostcpplibraries.com/boost.smartpointers-shared-ownership。编译然后给我错误

error: no member named 'size' in 'boost::shared_ptr<std::__1::vector<int, std::__1::allocator<int> > >'; did you mean to use '->' instead of '.'?
for (int i = 0; i < *sample.size(); i++) {

我在这里做错了什么?

根据运算符优先级,operator.的优先级高于operator*。所以*sample.size()*(sample.size())一样.这就是为什么编译器试图告诉你你不能直接在boost::shared_ptr上调用size()

您可以添加括号以明确指定优先级,例如(*sample).size();或者按照编译器的建议,将其更改为sample->size().

它应该(*sample).size(),因为它operator .比取消引用operator *具有更高的优先级,或者只是sample->size()