עבור לתוכן

הורשה ב ++c, לא עובר הידור. מישהו יכול לעוץ לי

Featured Replies

פורסם

עיצה ?

הקוד שלי מורכב מ header file שהוא base class כדלקמן:


//baseh.h

#ifndef mybase
#define mybase

class 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)

אודה למי שיואיל לחלצני מזה ! 

פורסם

כמו שכתוב ל-Base אין קונסטרקטור דיפולטי (כזה שאינו מקבל פרמטרים) לכן כשאתה יוצר אובייקט מהמחלקה inher נקרא באופן דיפולטי קונסטרקטור דיפולטי של Base (שלא קיים).

כדי להתגבר על זה אתה צריך ברשימת איתחול בקונסטרקטור של iner לקרוא לקונסטרקטור של base שמקבל פרמטר אחד.

פורסם

או בתרגום לשפת ++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;
}

פורסם
  • מחבר

תודה מקרב לב !

פורסם

אתה יכול להכניס לרשימת האתחול שלך גם אתחול עבור המשתנה SECOND, והפונ שלך תהייה רייקה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים