首页 > 解决方案 > 共享指针取消引用错误

问题描述

这里的 Java 家伙试图让我了解 C++,特别是共享指针。我正在使用点云库来做一些表面工作。IndicesPtr根据文档,PCL库包含一个在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++) {

我在这里做错了什么?

标签: c++boostshared-ptroperator-precedence

解决方案


根据运算符的优先级operator.优先级高于operator*。所以*sample.size()是一样的*(sample.size())。这就是编译器试图告诉您不能直接调用size()a 的原因boost::shared_ptr

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


推荐阅读