קאסטינג של int ל-enum C++ VS6.0 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

קאסטינג של int ל-enum C++ VS6.0


Electric Boom

Recommended Posts

אהלן אהלן

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

אני מנסה לשלוח לבנאי המסויים בעזרת קאסטינג ובלי והוא לא מקבל את זה

חיפשתי ברשת ובגדול אמרו - nono

יש דרך לעקוף את זה מלבד switch?

א. כי זה די לא אלגנטי

ב. כי זה ארוך מאוד :smile1:

עריכה:

עוד שאלה, אם אני משתמש גם ב-new ים וdeleteים וגם ב-mallocים - אמורה להיות בעייה(הפרסר הוא מתכנית ישנה מאוד)

כלומר האם תהיה לעשות delete למשהו שהוקצה עם calloc לדוגמא?

קישור לתוכן
שתף באתרים אחרים

אני מניח שאתה מתכוון ל-++C/C (מומלץ שתרשום את זה בכותרת).

אני רוצה להבין, המשתמש מכניס מספר או מילה?

כלומר, נניח שהenum הוא חודשים, המשתמש צריך להכניס 1 או january?

במקרה הראשון, אתה יכול להשתמש בקאסטינג פשוט.

במקרה השני, הכותרת שלך לא מדוייקת, ואתה חייב להשתמש בשרשרת ifים.

לגבי השאלה השנייה - אין בעיה להשתמש גם ב-new וגם ב-malloc באותה תכנית, אבל אסור לשלב ביניהם (אסור לשחרר ב-free שהוקצה באמצעות new וכד').

קישור לתוכן
שתף באתרים אחרים

שניצל זה עבד, יש לי בעייה אחרת -

האם יש איזושהי דרך לבצע try בשורת אתחול? אני יודע שזה נשמע עקום אבל פשוט יש לי שרשרת ארוכה של היררכיה וכל אחת משתמשת בבנאי של זה שלפניה (שעלול לזרוק חריגה) בשורת אתחול. אז זה או להוסיף עוד Ctor לכל המחלקות העליונות בהררכייה(ולקנן try\catch block בפנים) , שזה קשה - או לא יודע...

אני חשבתי שאין עם זה בעייה, הנחתי שהמנגנון זורק את הexception הראשון (כלומר הכי נמוך בהיררכיה שקרה קודם) והוא מפעפע לו למעלה - אם אף אחד לא תופס בדרך זה יתפס במיין(במיין יש לי כמובן בלוקי תפיסה)

אבל אני מקבל על זה warrnings :s07:

קישור לתוכן
שתף באתרים אחרים

סליחה שלא הסברתי ת'עצמי טוב, אני אנסה בדוגמא:

נניח שיש לך class B:public A

עכשיו ה-Ctor:

B(<long list of A's param's>,<long list of B's param's):A(<long list of A's param's>)

עכשיו A עלול לזרוק exception על אחד מהמשתני שהוא מקבל, וכך גם B - רק ש-B כמובן מסוגל לשלוח אם A שלח על אחד מהפרמטרים, או אם הוא צריך לשלוח על אחד החדשים או שניהם(ואז של ה-exception של A נשלח)

אני מקווה שזה יותר ברור ממקודם, אני חושב שעוד יותר סבכתי :-\

קישור לתוכן
שתף באתרים אחרים

זהו גם אני לא ראיתי פה מקום לפרשנויות

רק שאני מקבל warning ב-main, לטענתו אני לא מתייחס ל-exception שנזרק

עכשיו - לכל בנאי שעלול לזרוק(חח בהקשר אחר זה משפט מצחיק, אני לא מכיר בנאי שלא זורק :smile1:) שמתי לולאת תפיסה במיין, ועדיין אני מקבל 5 אזהרות כאילו ויכול להיות שזאת הבעייה שלו....

קישור לתוכן
שתף באתרים אחרים

אל תשים exceptions ב-constructorים, זה מתכון למגוון בעיות (כגון זו שהצגת). אם אתה צריך, תכתוב גם פונקציית init שזורקת.

הבעייה היא שוב, שהקונסטרקטור בשורות אתחול עלול בעצמו לזרוק חריגה. הייתי מעדיף שהקומפיילר לא יזרוק אזהרה על דבר כזה(בכל זאת - מבחינתו זה לא אמור לשנות איפה תהיה ההתייחסות, כל עוד הפעפוע נתפס) ואכן מסתבר שקומפיילר אחר לא נותן על זה אזהרה.

שורת init מסוכנת לאור "זומבי" כמו שמתואר בלינק של שניצל.

ושניצל מצטער שלא שלחתי\העלתי כלום, פשוט כבר הגשתי את זה as is לאור עייפות גדולה ושבירה של איבר גדול.

אני אנסה להמשיך לברר איך לטפל בזה\לעקוף את זה ולכתוב למקרה שמישהו יתקל בבעייה דומה.

תודה רבה על העזרה :xyxthumbs:

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...