编译包含此类的代码:
class Dessin
{
private:
vector<Figures*>T;
public:
void ajouteFigure(const Figures& f) const
{
for(auto element: T)
{
T.push_back(f);
}
}
};
Run Code Online (Sandbox Code Playgroud)
产生错误:
[错误]没有匹配函数调用'std :: vector :: push_back(const Figures&)const'
这是我应该在main()中做的事情
Dessin s;
s.ajouteFigure(Cercle(1.1));
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
假设Cercle是一个类名,你试图推送一个指向预期值的值.
要"修复"错误,您应该更改ajouteFigure原型以接受Figures指针和非const this:
void ajouteFigure(Figures* f)
Run Code Online (Sandbox Code Playgroud)
然后你应该调用它传递指向Figures对象的指针,即用new表达式创建:
s.ajouteFigure(new Cercle(1.1));
Run Code Online (Sandbox Code Playgroud)
话虽这么说,这段代码似乎毫无意义.您添加指针的次数与向量中的元素一样多(在您提供的示例中始终为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
}
};
Run Code Online (Sandbox Code Playgroud)
并在通话现场:
Dessin s;
s.ajouteFigure(make_unique<Cercle>(1.1)); // C++?14
Run Code Online (Sandbox Code Playgroud)
或者,如果你不能使用C++ 14:
Dessin s;
s.ajouteFigure(unique_ptr<Figures>(new Cercle{1.1}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |