[英]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.