פורסם 2005 במרץ 520 שנים עיצה ?הקוד שלי מורכב מ header file שהוא base class כדלקמן://baseh.h#ifndef mybase#define mybaseclass base{ public: base(int); protected: int first;};#endif ומקובץ פונקציות למחלקה כדלקמן:// base.cpp#include "base.h"base::base(int myF){ first = myF;}ו header file למחלקה יורשת כדלקמן:// inher.h#ifndef myinher#define myinher#include "base.h"class inher : public base{ public: inher(int, int); private: int second;};#endifוקובץ פונקציות למחלקה:// inher.cpp//#include "base.h"#include "inher.h"inher::inher(int myFirst, int mySecond){ first = myFirst; second = mySecond;}היישום הינו:// temp.cpp#include "base.h"#include "inher.h"int main(){ inher myHeritage(1,2); return 0;}פקודת ההידור הינה:bcc52 temp.cpp base.cpp inher.cppוהתהליך מסתיים בהודעת השגיאה:inher.cpp 7 cannot find default constructor to initialize base class 'base' in function inher::inher(int,int)אודה למי שיואיל לחלצני מזה !
פורסם 2005 במרץ 520 שנים כמו שכתוב ל-Base אין קונסטרקטור דיפולטי (כזה שאינו מקבל פרמטרים) לכן כשאתה יוצר אובייקט מהמחלקה inher נקרא באופן דיפולטי קונסטרקטור דיפולטי של Base (שלא קיים).כדי להתגבר על זה אתה צריך ברשימת איתחול בקונסטרקטור של iner לקרוא לקונסטרקטור של base שמקבל פרמטר אחד.
פורסם 2005 במרץ 520 שנים או בתרגום לשפת ++C, זה מה שאתה צריך להוסיף לקובץ המימוש של המחלקה הנגזרת:// inher.cpp//#include "base.h"#include "inher.h"inher::inher(int myFirst, int mySecond): base(myFirst) // <- specify base class constructor to use{ // first = myFirst; // - no need for that line anymore since the base class constructor initializes 'first' second = mySecond;}
פורסם 2005 במרץ 620 שנים אתה יכול להכניס לרשימת האתחול שלך גם אתחול עבור המשתנה SECOND, והפונ שלך תהייה רייקה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.