11

我有一个具有此功能的类:

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 类没有名为“RenderShape”的成员,我觉得这很奇怪,因为 PrimShapeBase 类当然具有该功能,但位于不同的头文件中。这是什么原因?

4

2 回答 2

20

你不是说

(*i)->RenderShape(destination); 

?

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

于 2012-08-14T20:59:25.447 回答
7

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

(**i).RenderShape(destination);

或者

(*i)->RenderShape(destination); 
于 2012-08-14T21:00:48.537 回答