פורסם 2009 במאי 816 שנים הבעיה היא שהגדרת struct ללא שם, וטיפוס Carlot שהוא בעצם אותו struct ללא שם./* C-style */typedef struct Carlot_t{} Carlot;Carlot_t c1; /* <-- not OK */struct Carlot_t c1; /* <-- OK */Carlot c1; /* <-- also OK because of: typedef struct Carlot_t Carlot; */// C++ stylestruct Carlot{ static int x;};Carlot::int x;
פורסם 2009 במאי 816 שנים מחבר איפה הוספת את ההגדרה int Carlot::size?בתוך ה MAINהסיומת של הקובץ היא CPP.הבעיה היא שהגדרת struct ללא שם' date=' וטיפוס Carlot שהוא בעצם אותו struct ללא שם.[/quote']מוזר לי שאתה לר מכיר את זה, אבל ניתן להגדיר שם למבנה בצורה הקצרה הזאת, כשהשם מפורט אחרי הסוגריים המסולסלים:typedef struct{ Type vehicle; static int size; //static isn't working unsigned int taken:1; int type;}Carlot;למה אתה משתמש ב- typedef?מה הסיומת של הקובץ שלך? אתה מנסה לקמפל את זה לC או CPP?מה זה :1?וחסר לך " בשורה הראשונה של הקובץ של הMAIN.typedef נועד לתת שם פשוט למבנה במקום שייקרא struct Carlotunsigned int taken:1 זה משתנה שניתן להשתמש רק בביט אחד, שזה בעצם משתנה בוליאנילגבי הגרשיים שחסר, זאת לא הייתה הבעיה, רק טעות בסימון לפני שהעתקתי את זה לכאן/אני אפשט את המבנה אפילו עוד יותר, רק בשביל להבהיר שהבעיה היא לא בשאר הקוד, גם המבנה הזה עם הצהרה עליו במיין לא עוברת קומפילציה:struct abc{ int a; static int bbb;};void main(){ struct abc shlomi; int struct abc::bbb; // int abc:bbb also not working}מצורפת תמונה של הקוד האחרון עם השגיאות[attachment deleted by admin]
פורסם 2009 במאי 816 שנים לא מצהירים על Carlot::size בתוך פונקציית ה-main. רק בקובץ cpp כלשהו, כמו משתנה גלובלי.ב-++C לא צריך להגדיר typedef struct. מספיק להגדיר איך ש-Zelig הראה.ולגבי משתנה בוליאני, למה לא להגדיר אותו פשוט bool?
פורסם 2009 במאי 816 שנים אתה לא הבנת אותי.אתה צריך להחליט אם אתה עובד ב-C או ב-C++.אם אתה עובד ב-C, אז אתה צריך את הטריק המקובל של typedef struct על מנת שתוכל להשתמש בטיפוס ללא struct לפני השם.אם אתה עובד ב-C++ אז אין צורך ב-typedef, אתה יכול להשתמש ישירות בשם המבנה.אם אתה עובד ב-C, תשכח מ-static בתוך struct.אם אתה עובד ב-C++, ואם אתה רוצה static member, אתה חייב לתת ל-struct שם (זה לא אותו דבר כמו להגדיר טיפוס שהוא שם נוסף ל-struct חסר שם, שזה מה שכרגע אתה עושה).עריכה: הנה תיקון הקוד האחרון שלך:struct abc{ int a; static int bbb;};int abc::bbb;void main(){ abc shlomi; shlomi.a = 3; abc::bbb = 4;}
פורסם 2009 במאי 916 שנים מחבר או מצויין עכשיו זה עובד.הסיבה שזה לא עבד זה בגלל שהצהרתי על CARLOT::SIZE בתוך ה MAIN.כל שאר הדברים העקומים שעשיתי, זה בגלל שאני לא למדתי עדיין C++.בשפת C אין משתנה מטיפוס bool, אז הייתי חייב ליצור אותו, וכנ"ל לגבי ה TYPEDEF שהייתי חייב בשביל לתת שם נורמלי לטיפוס.הסיבה היחידה שעבדתי עם קובץ CPP זה כדי לנסות לגרום למשתנה הסטטי לעבוד.תודה לכולם מאוד על ההסברים המפורטים ותודה שעזרתם לי לעבור את המחסום הזה.וסליחה Zelig, פספתי את ההודעה שלך ממקודם משום מה.
פורסם 2009 במאי 916 שנים בשפת C אין משתנה מטיפוס bool, אז הייתי חייב ליצור אותוbool הוא בסך הכל int. הוא לא באמת תופס רק ביט אחד. באותה מידה היית יכול לעשותtypedef int bool;וכמו שזליג אמר, אתה חייב להחליט אם אתה עובד ב-C או ב-++C. אם לא למדת ++C, ואתה עובד ב-C, אל תנסה לדחוף כל מיני הגדרות של ++C לקוד שלך, אלא פשוט תימנע מלהגדיר משתנים סטטיים כאלה (במקרה הזה היית פשוט צריך להוציא את המשתנה הזה מתוך ה-struct ולהגדיר אותו בתור משתנה גלובלי).
פורסם 2009 במאי 916 שנים מחבר סבבה.בכל מקרה, יש יתרון בלהגדיר משתנה unsigned int x:1;אם מבצעים עליו פעולות כמו x++ או x--, הערך שלו תמיד יהיה 0 או 1, בניגוד למשתנה רגיל, ללא שום קשר לגודל שהוא תופס בזכרון.תודה בכל מקרה!
פורסם 2009 במאי 916 שנים זה לא נכון לוגית לעשות ++ ו- --. אני הייתי מעדיף שיהיה לי באג (שבסופו של דבר אגלה אותו) בעקבות ++ ו- -- מאשר להשתמש בפעולות האלה על משתנה בוליאני.
פורסם 2009 במאי 1016 שנים כי אין שום הגיון בלעשות ++ או -- למשתנה בוליאני, ואתה לא אמור לסמוך על הערך המספרי שלו (כלומר, אל תניח שבהכרח true == 1).בגלל זה בשפות אחרות (C#/Java) אי אפשר לעשות את הפעולות האלה.
פורסם 2009 במאי 1016 שנים באופן כללי זה מפתיע ולכן זה מקשה על תחזוקת הקוד.תחשוב על מישהו שהוא לא אתה (או אפילו אתה, בעוד שנה) שקורא את הקוד הזה ומנסה להבין אותו. הוא רואה משהו כמו b++ וישר מניח ש-b הוא איזהו משתנה מספרי, או אולי אינדקס.אם אתה מתעקש, נדמה לי שזה יכול לעבוד:x = !x;זה יעבוד נכון ללא קשר כמה ביטים יש ב-X.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.