[英]Format of constructor of an inherited class
我正在使用Linux系统上的C ++进行类编程。 我有一个Queue类和一个Sim类,它继承了Queue的公共成员。 队列正在编译和测试正常。 但是,当我尝试为Sim类编写构造函数时,出现错误。
我省略了无关的代码。
错误:
〜$ make -f p04make
make:警告:文件“ Sim04.cpp”的修改时间为7.2 s
g ++ -g -c Sim04.cpp
Sim04.cpp:在构造函数âSim:: Sim(int)â中:
Sim04.cpp:28:64:错误:没有匹配的函数调用Queue :: Queue()
Sim04.cpp:28:64:注意:候选者是:Queue04.h:27:3:注意:Queue :: Queue(int)
Queue04.h:27:3:注意:候选人期望1个参数,提供0个
Queue04.h:19:7:注意:Queue :: Queue(const Queue&)
Queue04.h:19:7:注意:候选人期望1个参数,提供0个
make: * [Sim04.o]错误1
在Queue.h中:
class Queue {
int* Q;
int oldest;
int newest;
int size;
int count;
public:
Queue(int sz);
在Queue.cpp中:
Queue::Queue(int sz = 100)
:oldest(0), newest(-1), size(sz),count(0)
{Q = new int[size];}
在Sim.h中:
class Sim:public Queue{
int served;
int totalresponse;
int maxresponse;
void arrival(int time);
void departure(int time);
void Print(ostream& o, char* t, int v, char* u);
public:
Sim();
在Sim.cpp中:
Sim::Sim():served(0), totalresponse(0), maxresponse(0) {}
这些文件都链接到一个主程序文件中,而我正在使用一个makefile进行编译。 我承认我不完全了解该构造函数的外观,但是我根据我们一直在使用的构造函数对其进行了建模。 我是否认为构造函数应该继承Queue的构造函数并自动将Sim构造为Queue是不对的?
您必须使用一些int
参数从Sim
构造函数中调用Queue
构造函数。 因此,您必须更改:
Sim::Sim():served(0), totalresponse(0), maxresponse(0) {}
对于类似的东西:
Sim::Sim(int sz=100):Queue(sz), served(0), totalresponse(0), maxresponse(0) {}
您还需要修改Sim
构造函数声明,以接收Queue
需要的参数。
Sim(int sz);
您没有为Queue声明默认构造函数。 Sim的构造函数将在构造过程中自动调用Queue的构造函数。
为了使它编译,您需要在sim的构造过程中实现Queue的默认构造函数(不带任何参数),或者需要显式调用Queue的整数构造函数(带int的整数)。
您可以在Queue.cpp中进行更改
Queue :: Queue(int sz = 100)到Queue :: Queue(int sz)
然后在Queue.h中
class Queue {
int* Q;
int oldest;
int newest;
int size;
int count;
public:
Queue(int sz);
至
class Queue {
int* Q;
int oldest;
int newest;
int size;
int count;
public:
Queue(int sz = 100);
而且会起作用。 你只是犯错了; 在标头中指定默认值,而不是在实现中指定。
还有一件事:它继承了整个Queue类,您不能继承某些成员。 公共意味着基类的所有公共领域也将在派生类中也是公共的。 私有意味着基类的所有成员在派生中都是私有的,而与基类的实际范围无关。 受保护意味着所有公共成员都将转向受保护成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.