shared_ptr<>

时间:2016-04-01 10:36:58

标签: c++ c++11 smart-pointers

我正在使用此方法从对象中获取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。

0 个答案:

没有答案