c++ - 试图将 push_back 放入指向抽象类的 vector 中

标签 c++ c++11

编译包含此类的代码:

class Dessin
{
    private:
        vector<Figures*>T;
    public:
        void ajouteFigure(const Figures& f) const
        {
            for(auto element: T)
            {
                T.push_back(f);
            }
        }
};

产生错误:

[Error] no matching function for call to 'std::vector::push_back(const Figures&) const'

这是我应该在 main() 中做的

Dessin s;
s.ajouteFigure(Cercle(1.1));

为什么这行不通?

最佳答案

假设 Cercle 是一个类名,您正试图将一个值推送到需要指针的位置。

要“修复”错误,您应该更改 ajouteFigure 原型(prototype)以接受 Figures 指针和非常量 this:

void ajouteFigure(Figures* f) 

然后你应该通过一个指向 Figures 对象的指针来调用它,即用 new 表达式创建:

s.ajouteFigure(new Cercle(1.1));

话虽如此,这段代码似乎毫无意义。您添加指针的次数与 vector 中的元素一样多(在您提供的示例中始终为 0)。

也不建议使用原始指针,你应该使用像 std::unique_ptr 这样的智能指针,尽管这会破坏当前代码。

考虑一下,不太合适,例如:

class Dessin
{
    private:
        vector<unique_ptr<Figures>> T;
    public:
        void ajouteFigure(unique_ptr<Figures> f)
        {
            T.push_back(move(f)); // just once
        }
};

在调用站点:

Dessin s;
s.ajouteFigure(make_unique<Cercle>(1.1)); // C++≥14

或者,如果您不能使用 C++14:

Dessin s;
s.ajouteFigure(unique_ptr<Figures>(new Cercle{1.1}));

关于c++ - 试图将 push_back 放入指向抽象类的 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40065260/

相关文章:

java - C++ 中的 NULL 和 Java 中的 null 有什么区别?

C++函数返回两个char数组的相同索引元素

c++ - fstream 到缓冲区可以工作,filebuf 到缓冲区则不行

c++ - 相同的外部结构只有一个功能不同

c++ - 为什么 std::unique_ptr operator* 会抛出而 operator-> 不会抛出?

c++ - 虚函数返回的枚举协方差

c++ - 在 C++ 中将多个参数绑定(bind)到成员函数

C++ - 如何将 JSON 写回文件

c++ - 用模板参数填充容器

c++ - 如何从我的 HTTP 服务器向客户端发送图像?