C ++通过智能指针向量迭代

时间:2012-08-14 20:58:14

标签: c++ stl vector smart-pointers

我有一个具有此功能的课程:

typedef boost::shared_ptr<PrimShapeBase> sp_PrimShapeBase; 



class Control{
     public:
         //other functions
         RenderVectors(SDL_Surface*destination, sp_PrimShapeBase);
     private:
         //other vars
          vector<sp_PrimShapeBase> LineVector;

};

//the problem of the program

void Control::RenderVectors(SDL_Surface*destination, sp_PrimShapeBase){
    vector<sp_PrimShapeBase>::iterator i;

    //iterate through the vector
    for(i = LineVector.begin(); i != LineVector.end(); i ++ ){
      //access a certain function of the class PrimShapeBase through the smart
      //pointers
      (i)->RenderShape(destination); 

    }
}

编译器告诉我类boost :: shared_ptr 没有名为&#39; RenderShape&#39;从那以后我觉得很奇怪 类PrimShapeBase肯定有这个功能,但是在不同的头文件中。 这是什么原因?

2 个答案:

答案 0 :(得分:18)

你不是说

(*i)->RenderShape(destination); 

i是迭代器,*ishared_ptr(*i)::operator->()是对象。

答案 1 :(得分:7)

那是因为i是一个迭代器。取消引用它会给你一个智能指针,你需要加倍取消引用它。

(**i).RenderShape(destination);

(*i)->RenderShape(destination);