这里的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++) {
我在这里做什么错了?
答案 0 :(得分:3)
它应该为(*sample).size()
,因为operator .
的优先级高于取消引用operator *
或仅sample->size()
的优先级。
答案 1 :(得分:3)
根据operator precedence,operator.
的优先级高于operator*
。因此*sample.size()
与*(sample.size())
相同。这就是为什么编译器试图告诉您不能直接在size()
上调用boost::shared_ptr
的原因。
您可以添加括号以明确指定优先级,例如(*sample).size()
;或按照编译器的建议将其更改为sample->size()
。