C++错误中的复合 [没有匹配调用 'push_back'的成员函数]

Composite in C++ error [no matching member function to callto 'push_back']

本文关键字:push 成员 函数 back 复合 错误 C++ 调用      更新时间:2023-10-16

嗨,我正在尝试做一个简单的合成,当我试图向合成中添加一个Compener以训练时,我遇到了一个错误

这是代码

组件接口绘制复合物的接口

class ObjectInterface
{
public:
ObjectInterface() {}
virtual void draw()=0;
virtual void applyTranslation(float x,float y){}
virtual void applyRotationDirect(float angle){}
virtual void applyRotationIndirect(float angle){}
virtual void applyHomethety(float ratio){}
virtual void applyAxialSymmetry(){}
virtual void applyCentralSymmetry(){}
};


一个元素-行

class Line : public ObjectInterface,Object2D
{
public:
    Line(string color,Point p1,Point p2);
    // Inherited method from Object2D
    float getArea();
    float getPerimeter();
    // Inherited method from ObjectInterface
    virtual void draw();
    void applyTranslation(float x,float y);
    void applyRotationDirect(float angle);
    void applyRotationIndirect(float angle);
    void applyHomethety(float ratio);
    void applyAxialSymmetry();
    void applyCentralSymmetry();
    friend ostream& operator<< (ostream &os, const Line &p);
 };


class Fresque : public ObjectInterface
{
public:
    Fresque();
    // Inherited method from ObjectInterface
    void draw();
    void applyTranslation(float x,float y);
    void applyRotationDirect(float angle);
    void applyRotationIndirect(float angle);
    void applyHomethety(float ratio);
    void applyAxialSymmetry();
    void applyCentralSymmetry();
    // Personal method
    bool add(ObjectInterface const &o);
    bool remove(ObjectInterface const& o);
private:
    std::vector<ObjectInterface*> objects;  // CONTAINER FOR COMPOSITE
 };

add方法的cpp文件

bool Fresque::add(ObjectInterface const & o){
  objects.push_back(o);  //===> THE ERROR HERE
return true;
}

错误:

/fresque.cpp:50:erreur:调用"push_back"时没有匹配的成员函数objects.push_back(o);~~~~~~

IDE是QT,我不知道错误在哪里,感觉很糟糕,我很确定这是一个明显的错误:/。

std::vector<ObjectInterface*>是指向ObjectInterface s的指针向量。oObjectInterface,而不是ObjectInterface*(指向ObjectInterface的指针),因此您需要获得o:的地址

objects.push_back(&o);