错误:没有用于调用构造函数的匹配函数

时间:2019-07-06 17:59:54

标签: c++ constructor

我正在用C ++学习oop,并且遇到以下错误:

  

在构造函数'pflFr1 :: pflFr1()'

     

错误:没有匹配的函数可以调用worldBuilder :: worldBuilder()

class worldbuilder正在生成受保护的2d数组。 pflfr1类是来自worldbuilder的。但是不知何故,worldbuilder的构造函数存在问题。

我的代码:

main.cpp:

#include <iostream>
#include "pflfr1.h"
#include "worldbuilder.h"
#include <vector>

using namespace std;

int main()
{
    srand(time(0));
    int sl = 10;

    worldBuilder w_obj(sl);
    w_obj.buildPhyWelt();
    w_obj.buildVegWelt();
    pflFr1 objekt();
    return 0;
}

worldbuilder.h:

#ifndef WORLDBUILDER_H
#define WORLDBUILDER_H
#include <vector>

using namespace std;

class worldBuilder
{
    public:
        worldBuilder(int sl_);
        vector<vector<int> > buildPhyWelt();
        vector<vector<int> > buildVegWelt();
    protected:
        vector<vector<int> > phyWelt;
        vector<vector<int> > vegWelt;
        int sl;
    private:
};

#endif // WORLDBUILDER_H

worldbuilder.cpp:

#include <iostream>
#include "worldbuilder.h"
#include <vector>

using namespace std;

worldBuilder::worldBuilder(int sl_)
: sl(sl_)
{

}

vector<vector<int> > worldBuilder::buildPhyWelt()
{
    phyWelt.resize(sl, vector<int>(sl));

    // initialisiere physische Welt
    // 1 = land, -1 ist meer
    for(int i=0; i<sl; i++)
    {
        for(int j=0; j<sl; j++)
        {
            phyWelt[i][j] = 1;
        }
    }
}

vector<vector<int> > worldBuilder::buildVegWelt()
{
    vegWelt.resize(sl, vector<int>(sl));

    // initialisiere Nahrung
    for(int i=0; i<sl; i++)
    {
        for(int j=0; j<sl; j++)
        {
            if(rand()%100<=2)
            {
                vegWelt[i][j] = 1;
            }
            else
            {
                vegWelt[i][j] = 0;
            }

        }
    }
}

pflfr1.h:

#ifndef PFLFR1_H
#define PFLFR1_H
#include <vector>
#include "worldbuilder.h"

using namespace std;

class pflFr1: protected worldBuilder
{
    public:
        pflFr1();
    protected:
    private:
        int y;
        int x;
        int hp;
};
#endif // PFLFR1_H

pflfr1.cpp:

#include <iostream>
#include <pflfr1.h>
#include <cstdlib>
#include <ctime>

using namespace std;

pflFr1::pflFr1()
: hp(10)
{
    int initPosY = rand()%sl;
    int initPosX = rand()%sl;

    y = initPosY;
    x = initPosX;
}

1 个答案:

答案 0 :(得分:0)

您的默认构造函数pflFr1::pflFr1()的实现被重写为

pflFr1::pflFr1()
: worldBuilder(), hp(10){
    ...
}

由于pflFr1类是从worldBuilder派生的,因此它的构造函数必须在pflFr1对象创建过程中被调用。默认行为是调用基的默认构造函数-worldBuilder()

但是该构造函数不存在。您仅声明了worldBuilder::worldBuilder(int sl_);。这样,您就禁用了自动为类生成默认构造函数的功能,只有在未声明用户定义的构造函数的情况下,才会这样做。

您都可以在类内部编写worldBuilder()=default;,这将使s1未被初始化。或者,您可以使用委托的构造函数-worldBuilder():worldBuilder(0){}