Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:调用构造函数时没有匹配的函数 我在C++中学习OOP,有以下错误:_C++_Constructor - Fatal编程技术网

错误:调用构造函数时没有匹配的函数 我在C++中学习OOP,有以下错误:

错误:调用构造函数时没有匹配的函数 我在C++中学习OOP,有以下错误:,c++,constructor,C++,Constructor,在构造函数“pflFr1::pflFr1()中” 错误:调用worldBuilder::worldBuilder()时没有匹配的函数 类worldbuilder正在生成受保护的二维阵列。类pflfr1是从worldbuilder继承的。但不知何故,worldbuilder的构造函数有一个问题 我的代码: main.cpp: #include <iostream> #include "pflfr1.h" #include "worldbuilder.h&q

在构造函数“pflFr1::pflFr1()中”

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

类worldbuilder正在生成受保护的二维阵列。类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;
}
#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
#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;
            }

        }
    }
}
#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
#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;
}
#包括
#包括“pflfr1.h”
#包括“worldbuilder.h”
#包括
使用名称空间std;
int main()
{
srand(时间(0));
int sl=10;
世界建筑商w_obj(sl);
w_obj.buildPhyWelt();
w_obj.buildVegWelt();
pflFr1-objekt();
返回0;
}
worldbuilder.h:

#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;
}
#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
#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;
            }

        }
    }
}
#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
#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;
}
\ifndef WORLDBUILDER\u H
#定义WORLDBUILDER_H
#包括
使用名称空间std;
类worldBuilder
{
公众:
世界建筑商(国际建筑商);
向量buildPhyWelt();
向量buildVegWelt();
受保护的:
向量phyWelt;
矢量织锦;
int sl;
私人:
};
#endif//WORLDBUILDER\u H
worldbuilder.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;
}
#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
#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;
            }

        }
    }
}
#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
#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;
}
#包括
#包括“worldbuilder.h”
#包括
使用名称空间std;
worldBuilder::worldBuilder(int-sl_)
:sl(sl_)
{
}
vector worldBuilder::buildPhyWelt()
{
调整大小(sl,向量(sl));
//初始物理世界
//1=土地,-1是米

对于(int i=0;i您的默认构造函数
pflFr1::pflFr1()
的实现重写为

pflFr1::pflFr1()
: worldBuilder(), hp(10){
    ...
}
由于
pflFr1
类派生自
worldBuilder
,因此必须作为
pflFr1
对象创建的一部分调用其构造函数。默认行为是调用基的默认构造函数-
worldBuilder()

但是此构造函数不存在。您只声明了
worldBuilder::worldBuilder(int sl_u1;);
。这样做可以禁用类的默认构造函数的自动生成,这仅在未声明用户定义的构造函数时才执行


您可以在类内编写
worldBuilder()=default;
,这将使
s1
保持未初始化状态。也可以使用委托构造函数-
worldBuilder():worldBuilder(0){}

使用名称空间std;
-在头文件中这样做是非常糟糕的。如果存在另一个构造函数(您有),则不会自动生成默认构造函数。我有一个建议,请使用有意义的变量名。或者使用初始值(0)可以在
pflFr1::pflFr1
的初始值设定项列表中明确指定(可能有一个值适用于
pflFr1
,但不适用于从
worldBuilder
派生的其他类)