共享指针取消引用错误
Shared pointer dereferencing error
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++) {
我做错了什么?
它应该是 (*sample).size()
因为 operator .
比解引用 operator *
有更高的优先级或者只是 sample->size()
.
根据 operator precedence,operator.
的优先级高于 operator*
。所以 *sample.size()
与 *(sample.size())
相同。这就是编译器试图告诉您不能直接在 boost::shared_ptr
上调用 size()
的原因。
您可以添加括号来明确指定优先级,例如(*sample).size()
;或者按照编译器的建议,将其更改为 sample->size()
.
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++) {
我做错了什么?
它应该是 (*sample).size()
因为 operator .
比解引用 operator *
有更高的优先级或者只是 sample->size()
.
根据 operator precedence,operator.
的优先级高于 operator*
。所以 *sample.size()
与 *(sample.size())
相同。这就是编译器试图告诉您不能直接在 boost::shared_ptr
上调用 size()
的原因。
您可以添加括号来明确指定优先级,例如(*sample).size()
;或者按照编译器的建议,将其更改为 sample->size()
.