פורסם 2008 ביולי 517 שנים שלום לכולם!אני כותב תוכנית במסגרת הכנה למבחן ואני תקוע במשהו:התוכנית כוללת 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,cpublic: 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תודה
פורסם 2008 ביולי 517 שנים הבעיה שלך היא שאתה ניגש לאובייקט const (כי הכרזת const Honda& sec) ואתה מפעיל עליו מתודה לא const (אני מדבר על getIDcar).על אובייקט const ניתן להפעיל רק מתודות const (שאינן משנות את האובייקט). תכריז על getIDcar כך:public: // ... int getIDcar() const; // ...
פורסם 2008 ביולי 517 שנים מחבר למרות שב getIDcar() אני לא משנה את האובייקט?****עריכה: בדקתי וזה אכן עובד...*****
פורסם 2008 ביולי 517 שנים אתה צריך להצהיר על כך שאתה לא משנה את האובייקט. ואז גם הקומפיילר בודק שאתה לא מנסה לשנות אותו (במסגרת מה שסביר לבדוק).
פורסם 2008 ביולי 517 שנים מחבר אוקיי, תודה הבנתי.משהו יודע משהו לגבי הבעייה נוספת?כמו כן, כרגע התווספה תקלה נוספת:בעת הידור התוכנית רשום:error c2471: cannot update program database...fatal error C1083: cannot open database file...זה קרה לי גם קודם (לפני שעה בערך), ופשוט העתקתי הכל לתוך פרוייקט חדש והכלהסתדר.אני משתמש ב 9.0.21022.8 VSתודהתודה רבה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.