Composite in C++ 错误 [没有匹配的成员函数来调用 'push_back']
Composite in C++ error [no matching member function to callto 'push_back']
你好,我想做一个简单的复合,我在尝试将一个组件添加到复合中进行训练时遇到错误
这是代码
组件界面绘图合成界面
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
};
添加方法的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
的指针向量。 o
是一个ObjectInterface
,不是ObjectInterface*
(指向ObjectInterface
的指针),所以需要得到o
的地址:
objects.push_back(&o);
你好,我想做一个简单的复合,我在尝试将一个组件添加到复合中进行训练时遇到错误
这是代码
组件界面绘图合成界面
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
};
添加方法的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
的指针向量。 o
是一个ObjectInterface
,不是ObjectInterface*
(指向ObjectInterface
的指针),所以需要得到o
的地址:
objects.push_back(&o);