编译包含此类的代码:
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/