对.cconstructor的调用没有匹配的函数

no matching function for call to ..constructor

本文关键字:函数 cconstructor 调用      更新时间:2023-10-16

我正在尝试编译一个涉及继承的代码。

#include "MapEntityClass.h"
class RectangularEntityClass:public MapEntityClass
{
  public:
    void drawOnMap(MapClass *mapObj) const;
  protected:
};

父类是MapEntityClass,它没有默认构造函数,但有一个值构造函数。当我编译时,我得到以下错误:

RectangularEntityClass.h: In constructor ‘RectangularEntityClass::RectangularEntityClass()’:
RectangularEntityClass.h:12:7: error: no matching function for call to ‘MapEntityClass::MapEntityClass()’
   class RectangularEntityClass:public MapEntityClass
   ^
RectangularEntityClass.h:12:7: note: candidates are:
In file included from main.cpp:1:0:
MapEntityClass.h:32:5: note: MapEntityClass::MapEntityClass(const PixelLocationClass&, const ColorClass&)
     MapEntityClass(
     ^
MapEntityClass.h:32:5: note:   candidate expects 2 arguments, 0 provided

知道怎么了吗?

在继承中,只有当父类没有构造函数或只有默认构造函数时,子类才不需要有构造函数。

在任何情况下,如果父类碰巧有一个参数化构造函数,则子类应该有一个应调用父类构造函数的参数化构造函数。

示例:

class A {
    int aVal;
    public:
        A(int);
};
A::A(int aVal)
{
    this->aVal = aVal;
}
class B : public A {
    int bVal;
    public:
        B(int, int)
};
B::B(int aVal, int bVal) : A(aVal)
{
    this->bVal = bVal;
}