代码之家  ›  专栏  ›  技术社区  ›  clicky

共享指针取消引用错误

  •  0
  • clicky  · 技术社区  · 6 年前

    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++) {
    

    我在这里做错什么了?

    2 回复  |  直到 6 年前
        1
  •  3
  •   songyuanyao    6 年前

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

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

        2
  •  3
  •   user7860670    6 年前

    或者应该是 (*sample).size() 因为 operator . 优先于取消引用 operator * 或者只是 sample->size() 是的。