עבור לתוכן

C++ , בעיה קטנה עם מערך מקושר ועוד משהו

Featured Replies

פורסם

איבר במערך המקושר הוא

struct node      // structure of a node for a list
{
car members_car; //àåáé÷è øëá
member members_info; //àåáé÷è çáø îåòãåï
node* next; // pointer to an object node
};

אבל מה אני צריך לעשות כשהוא אומר לי לעשות initialize לmembers_car ולmembers_info ?

פורסם
  • מחבר

הנה

[attachment deleted by admin]

פורסם

יש לך שם class שמוכל בתוך struct, וזה לא דבר הגיוני במיוחד, כי אתה חייב constructor כדי לאתחל את ה- node.

ב- constructor אתה חייב לאתחל את ה- member_car וה- member_info. כיון שאין לך default constructor עבור car ו- member, אתה חייב לקרוא ל- constructors שלך במפורש בתוך ה- constructor של ה- node.

האמת, זה בכלל נראה רע, כי נראה לי שה- node אמור להחזיק רק מצביעים ולא את האובייקטים עצמם.

פורסם

אם בכל זאת אתה רוצה ש node יחזיק את האובייקטים עצמם, הדרך ההכי פשוטה (שתדרוש הכי פחות עבודה מצידך) היא להגדיר את node כאובייקט, ואז ה-constructor של node ידאג לאתחל את כל האובייקטים המוכלים בו.

מטי.

פורסם
  • מחבר

מוכן לעזור לי?

פורסם

class node
{
node* _next;
member _member_info;
car _member_car;

node( int car_year, chat[] car_brand, float car_volume, int car_gear,
char member_id_num[] , char member_first_name[] , char member_last_name[])
:0,"",0,0,NULL,"","";
{
_member_info = member(member_id_num,member_first_name,member_last_name);
_member_car = car_year,car_brand,car_volume, car_gear);
}
};

אולי אתה תרצה להפריד את ה header , ויכול שיש בעיות סינטקס (לא בדקתי) אבל הרעיון די ברור נראה לי.

מטי.

פורסם
  • מחבר

זה לא לגמרי מובן לי

node( int car_year, chat[] car_brand, float car_volume, int car_gear,
char member_id_num[] , char member_first_name[] , char member_last_name[])
:0,"",0,0,NULL,"","";

ו...

מה הקטע של ה _ לפני הכל?

פורסם

זה סימון לעצמי. כל משתנה שמתחיל ב _ הינו data member, ככה במידה וכותבים פרוייקט עם כמה עשרות אובייקטים ששמותיהם דומים, בכל שלב (בתכנות) אני יודע אילו הם משתני העצם שלי ומיהם המשתנים שיבאתי.

מה שציטטת הינה הגדרה של בנאי 7 פרמטרים ובנאי שלא מקבל אף פרמטר (עבורו הערכים מצויינים אחרי ה- : לפי בדר ההגדרה)

מטי.

פורסם
  • מחבר

יש לך ICQ? זה יגרום לדברים לזוז יותר מהר

חידשתה לי

כלומר במקרה שהקונסטרקטור לא מקבל נתונים הוא מכניס את מה שיש אחרי ה " : " ?

פורסם
  • מחבר

עשיתי כמה שיפצורים

הקוד שלך די בעייתי

אני מצרף הכל

ותמונה , והנה הפרוש שלה

במלבן האדום - הניסיון שלי להעביר לCLASS - לא הלך טוב

במלבן הלבן - שיפצור של ההצעה שלך - לא עבד

במלבן הירוק - ההצעה שלך - לא עבד (גם אחרי התיקונים)

במלבן הכתום - הניסיון שלי - לא עבד

צריך עזרה

זה אמור לרוץ ביום ראשון

ואני מאוד לחוץ

[attachment deleted by admin]

פורסם

אוקי, הסבר קטן על המשמעות של ה-: בקונסטרקטור:

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

לכן, כשיש לך קלאס שיש לו איבר שהוא מסוג car (נניח, הקלאס node), הוא חייב לאתחל אותו בקונסטרקטור עם פרמטרים.

אז אתה כאילו אמור לעשות מה שעשית במלבן הירוק.

אבל מה? הקומפיילר לא יודע שהכוונה שלך היא לאתחל את car מיד בתחילת הקונסטרקטור - הוא חושב שזו סתם עוד פקודה.

אתה חייב לציין במיוחד שזו פקודת אתחול של car, ושיבצע אותה לפני שהוא מתחיל לבצע את שאר הקוד של הקונסטרקטור.

ואיך עושים את זה? באמצעות הנקודותיים.

bottom line:

כשיש לך קלאס עם איברים, תאתחל את כל האיברים ב-:, ולא בתוך הקונסטרקטור עצמו. המקרה היחיד שאתה צריך לאתחל את האיברים בקונטרקטור הוא במקרה שזה דורש הפעלה של פונקציה נפרדת.

פורסם

ומן הסתם, אתה לא יכול לעשות השמה של new Car ל- Car (כי new מחזיר מצביע)

ב- intialization אתה אמור לקרוא ל- constructors של ה- member variables שלך ושל ה- class שממנו אתה יורש (אם יש כזה).

בכל אופן - אם יוצא לך לך לאתחל את ה- node עם משתנים שאתה במילא הולך לשנות אותם - כנראה שאתה מסבך דברים בלי צורך.

יותר הגיוני שה- constructor של ה- node ייקח כבר את ה- Car וה- member שלו בתור פרמטרים)

פורסם
  • מחבר

SO.... HOW TO FIX?

פורסם

אוקי, כנראה לא הבנת את המשמעות של ה-: מספיק היטב...

אז הנה דוגמה:


class node {
  car members_car;
  member members_info;
  node* next;

  node () : members_info("","",""), members_car(0,"",0,0), next(NULL) {
    // Since the constructors for members_info and members_car
    // were already called, this constructor should be empty.
    // Note that we also initialized "next" to point to null.
  }

  // More code here...

};

ארכיון

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

דיונים חדשים