עבור לתוכן

הורשה ב CPP

Featured Replies

פורסם

שלום לכולם!

אני כותב תוכנית במסגרת הכנה למבחן ואני תקוע במשהו:

התוכנית כוללת BASE שנקרא CAR. הוא כולל PRIVATE:

INT - מס' רכב

CHAR * - צבע

CHAR - קטגוריה.

הבנים, הם בעצם סוגי רכבים (הונדה, אופל וכו') והוא כולל PRIVATE:

CHAR * - תת דגם (סיויק, אקודרד וכו').

CAR.H

---------

#ifndef _CAR_H
#define _CAR_H
#include <iostream>
using namespace std;

class Car
{
int IDcar;//5 digits
char * color;
char category;//a,b,c
public:
Car(int, char *, char);//ctor
Car();
Car(const Car &);//cctor
~Car();//dctor
int getIDcar();
char * getColor();
char getCategory();
void setIDcar(int);
void setColor(char*);
void setCategory(char);
virtual void print();
//virtual void setType(char*)=0;
};
#endif

כאשר הבונה ברירת המחדל נראה ככה:

Car::Car()
{
IDcar=12345;
color="white";
category='A';
}

הבן, HONDA נראה ככה:

#ifndef _HONDA_H
#define _HONDA_H
#include "car.h"
#include <iostream>
using namespace std;

class Honda:public Car
{
char * type;
public:
Honda(char*, int, char *, char);//ctor
Honda();//default ctor
Honda(const Honda &);//cctor
~Honda();//dctor
char * getType();
void setType(char *);
void print();
};
#endif

יש לי בעייה בבונה מעתיק CCTOR:

Honda::Honda(const Honda & sec)
{
type=sec.type;
Car(sec.getIDcar(),sec.getColor(),sec.getCategory());
}

הוא רושם לי:

error C2662: 'Car::getIDcar': cannot convert 'this' pointer from 'const Honda' to 'Car&'

חשוב לציין כי אם מורידים את ה CONST בהגדרה לו, הכל עובד תקין, למה זה קורה?

כמו כן, כרגע התווספה תקלה נוספת:

בעת הידור התוכנית רשום:

error c2471: cannot update program database...

fatal error C1083: cannot open database file...

זה קרה לי גם קודם (לפני שעה בערך), ופשוט העתקתי הכל לתוך פרוייקט חדש והכלהסתדר.

אני משתמש ב 9.0.21022.8 VS

תודה

פורסם

הבעיה שלך היא שאתה ניגש לאובייקט const (כי הכרזת const Honda& sec) ואתה מפעיל עליו מתודה לא const (אני מדבר על getIDcar).

על אובייקט const ניתן להפעיל רק מתודות const (שאינן משנות את האובייקט). תכריז על getIDcar כך:


public:
// ...
int getIDcar() const;
// ...

פורסם
  • מחבר

למרות שב getIDcar() אני לא משנה את האובייקט?

****עריכה: בדקתי וזה אכן עובד...*****

פורסם

אתה צריך להצהיר על כך שאתה לא משנה את האובייקט. ואז גם הקומפיילר בודק שאתה לא מנסה לשנות אותו (במסגרת מה שסביר לבדוק).

פורסם
  • מחבר

אוקיי, תודה הבנתי.

משהו יודע משהו לגבי הבעייה נוספת?

כמו כן, כרגע התווספה תקלה נוספת:

בעת הידור התוכנית רשום:

error c2471: cannot update program database...

fatal error C1083: cannot open database file...

זה קרה לי גם קודם (לפני שעה בערך), ופשוט העתקתי הכל לתוך פרוייקט חדש והכלהסתדר.

אני משתמש ב 9.0.21022.8 VS

תודה

תודה רבה

פורסם

תמחוק את ה-pdb. אולי נגמר לך המקום? הוא בד"כ די גדול.

ארכיון

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

דיונים חדשים