我正在使用此方法从对象中获取shared_ptr<>
:
virtual std::shared_ptr<Bar<T>> iterator() const override{
auto iter = std::make_shared<Foo>(Foo(*this));
return iter;
}
其中Bar是Foo的基类。 Foo不是模板类,而Bar是。 我在这里收到错误:
auto i = object.iterator();
while (i->hasNext()){
std::cout << i->next()<<std::endl;
}
说:
error: base operand of '->' has non-pointer type 'std::shared_ptr<Bar<int> >'
while (i->hasNext()){
^
因为shared_ptr应该支持->
运算符,所以我不理解为什么会出现此错误。
编辑:
Foo
是类Stack
的内部类,如下所示:
template<typename T>
class Stack{
public:
virtual std::shared_ptr<Bar<T>> iterator() const override{
auto iter = std::make_shared<Foo>(Foo(*this));
return iter;
}
private:
class Foo: public Bar<T>{
virtual const T& next(){}
virtual Boolean hasNext(){}
};
};
和班级酒吧:
template<typename T>
class Bar:{
public:
virtual const T& next()=0;
virtual Boolean hasNext()=0;
};
编译器是Windows 10 x64上的Clion中的MinGW。