עבור לתוכן

צריך עזרה בפקודות preprocessor ב-C++

Featured Replies

פורסם

אני בונה פרוייקט גדול עם 30 מחלקות בערך וכל מיני ירושות בינהן , ואין לי מושג איך למנוע multiple inclusion של קובצי header.

במיוחד נתקלתי בבעייה עם מחלקה A שמחזיקה פוינטר למחלקה B ו-B צריכה להפעיל מתודה של A .

הכללתי את ה-HEADER של B ב-A אבל בשביל ש-B תוכל להפעיל את המתודה של A אני צריך להכליל את

ה-HEADER של A ב-B אבל זה ייצור לי לולאת הכללות או משהו כזה.

איך מונעים את זה ?

תודה לעוזרים.

פורסם

קודם כל, כל HEADER אתה צריך "לעטוף" ב-

#ifndef _CLASSNAME_H_
#define _CLASSNAME_H_


#endif

שים לב שאתה לא רושם את הקוד בתוך קובץ הH, אלא בקובץ נפרד(קובץ CPPעושה INCLUDE לקובץ הH).

ואתה יכול להצהיר על CLASS לפני שאתה מגדיר אותו:


class ClassName;

פורסם
  • מחבר

דבר ראשון תודה

שנית, בקובץ הHEADER שלי אני מכליל עוד כמה HEADER-ים

איפה אני שם אותם ? אחדי ה- define _CLASSNAME_H# ?

פורסם

כן.

אם אתה רוצה, תחפש XIMPL או PIMPL.

פורסם

לטכניקה של מניעת #include חוזר ע"י ה-preprocessor קוראים "include guards". אין שום פרוייקט רציני ב-C או ב-C++ שלא מחייב אותם. שים אותם בכל קובץ H שאתה יוצר, גם אם לא נראה לך שאתה צריך.

זה מצביע לעבר אחד החורים ב-C ו-C++: השפות הללו מסתמכות במידה רבה מאוד על #include-ים טקסטואלים של קבצים רבים בזמן קומפילציה.

פורסם
  • מחבר

תבורכו אנשים :xyxthumbs:

ארכיון

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

דיונים חדשים