升压:: shared_ptr的<性病::矢量<东西>&GT;运算符[]的用法

时间:2015-04-22 19:49:38

标签: c++11 boost

我有一个看起来像这样的结构。

typedef struct superCellBoxStruct {
    float_tt cmx,cmy,cmz;  /* fractional center of mass coordinates */
    float_tt ax,by,cz;
    boost::shared_ptr<std::vector<atom>> atoms; /* contains all the atoms within the super cell */
} superCellBox;

现在,当我想访问atoms[i]时,我得到了

  

错误:无效使用'boost :: detail :: sp_array_access&gt; :: type {aka void}'

在我的应用程序中传递共享向量的正确方法是什么,或者访问其运算符[]的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

选择一个:

(*atoms)[i]    
atoms->operator[](i);

我通常选择第一个,但它们都是等价的。

作为旁注,根据我的经验,这样的shared_ptr<vector>通常是设计不良的症状,也许您想将整个superCellBox放在shared_ptr

此外,这不是C,请使用struct name {};代替typedef struct tagName {} name;