c++ - 从 std::vector 获取最后一个元素

标签 c++ shared-ptr

在下面的示例中,我想从 vector 中获取一个元素。但我不明白这个错误:

#include <vector>
#include <memory>


using namespace std;

class Foo{
    virtual int end() = 0;
};

class Bar : public Foo{
    int end(){
        return 0;
    }
};


int main(){
    vector<shared_ptr<Foo>> a;
    a.push_back(make_shared<Bar>());
    shared_ptr<Foo> b = a.pop_back();
}

这里的错误:

 g++ test.cpp
test.cpp: In function ‘int main()’:
test.cpp:21:35: error: conversion from ‘void’ to non-scalar type ‘std::shared_ptr<Foo>’ requested
   21 |     shared_ptr<Foo> b = a.pop_back();
      |                         ~~~~~~~~~~^~

最佳答案

这确实令人困惑。如前所述kiner_shah在他的评论中。您不想使用 pop_back

int main(){
    vector<shared_ptr<Foo>> a;
    a.push_back(make_shared<Bar>());
    shared_ptr<Foo> b = a.back();
}

pop_back 方法不返回任何内容。

关于c++ - 从 std::vector 获取最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70832667/

相关文章:

c++ - 如何将非静态类成员 `std::bind` 转换为 Win32 回调函数 `WNDPROC`?

c++ - 让独立的 shared_ptr 指向同一个对象是否合法?

c++ - 尝试打开 SDL2 窗口时与 D-Bus 相关的运行时崩溃

c++ - 从类型中减去是什么意思?

c++ - C++从文件中读取字符

c++ - 2D 平台碰撞处理

c++ - 在 C++ 11 中将 `nullptr` 作为 `std::shared_ptr` 返回是否安全?

c++ - 有没有办法安全地删除指向 MyObject 的非唯一指针的 QList?

c# - 使用 SWIG 从 C++ 初始化对 C# 共享指针的引用

c++ - 如何将原始指针包装到 shared_ptr 中并防止 shared_ptr 删除对象?