错误:调用构造函数时没有匹配的函数 我在C++中学习OOP,有以下错误:
在构造函数“pflFr1::pflFr1()中” 错误:调用worldBuilder::worldBuilder()时没有匹配的函数 类worldbuilder正在生成受保护的二维阵列。类pflfr1是从worldbuilder继承的。但不知何故,worldbuilder的构造函数有一个问题 我的代码: main.cpp:错误:调用构造函数时没有匹配的函数 我在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
#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
派生的其他类)