我有一个具有此功能的课程:
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肯定有这个功能,但是在不同的头文件中。 这是什么原因?
答案 0 :(得分:18)
你不是说
(*i)->RenderShape(destination);
i
是迭代器,*i
是shared_ptr
,(*i)::operator->()
是对象。
答案 1 :(得分:7)
那是因为i
是一个迭代器。取消引用它会给你一个智能指针,你需要加倍取消引用它。
(**i).RenderShape(destination);
或
(*i)->RenderShape(destination);