בעיה מוזרה - C

nocgod

New member
אבל אתה לא יכול...

להשתמש בstruct הראשון מה שאתה מגדיר בstruct השני מבלי לעשות forward declaration.
הקומפיילר הוא one pass compiler הוא לא יכול לנחש את הדברים האלה לפני שאתה מגדיר אותם, בשביל זה המציאו את הforward declaration.
ברור שזה יעשה בלאגן.
הויכוח היה (מנקודת המבט שלי) בהאם מותר או אסור להשתמש ב anonymous structs ב C הסטנדרטי (למרות שהיום הסטנדרט הוא C11 ויש בו הרבה מעבר למה שהיה בansiC)

הטעות של הבחור נבעה מזה שהוא נסה להשתמש בstruct item (שלא הוגדר כזה) בתוך מבנה אנונימי לו עשה typedef וקרא לו item.
 

BravoMan

Active member
מה שבסה"כ רציתי להבהיר,

ובמבט שני לא התנסחתי טוב, זה ש-struct item תמיד יוכר כטיפוס שונה מ-struct כלשהו, אנונימי או לו, שעשו לו typedef לשם item ולכן השימוש בו ל-next אינו נכון מבחינה לוגית, גם אם אפשר להתחמק איתו בחלק מהמקרים בגלל גמישות השפה כלפי מצביעים.

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

selalerer

New member


 

nocgod

New member
השגיאות שלך

כותבים struct ולא sturct
ואז נשארת לך רק השגיאה בשורה temp->data=i;
המשתנה temp הוא מערך מצביעים ואתה מתייחס אליו כאל מצביע, וזה לא נכון.
 

pitbol3

New member
תודה!

שגיאת כתיב כזאת זה דבר מעצבן...
ובשורה הספציפית הזו תיקנתי ל temp[i-1] במקום טמפ...
משום מה יש לי שגיאה בזמן ריצה, למה?
 

nahsh

New member
כי המערך הוא בגודל 2

אבל אתה מכניס לתוכו ערכים בגודל n. ובכלל - לשם מה המערך נועד? יש לך בסיס לרשימה מקושרת - למה מערך??
 

pitbol3

New member
אחלה תודה רבה!

במקום המערך הדבילי הזה אני משתמש ב temp->next והכל עבד.

תודה לכולם!
 

nocgod

New member
אתה מעביר את n=3

אבל עושה מערך בגודל 2
אתה חורג מגבולות המערך באיטרציה האחרונה של הלולאה.

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

nocgod

New member
הדרך הנכונה להגדיר node של רשימה מהקושרת היא

typedef struct _node Node;

struct _node
{
int data;
Node* next;
};

יש עוד דרכים אבל זו הדרך בה אני הייתי בוחר
אל תשכח שאתה לא יכול להשתמש בהגדרת הtypedef בתוך הtypedef עצמו, הוא עוד לא מוגדר.
 

pitbol3

New member
תודה על העזרה

פשוט בהתחלה הייתה לי שגיאת כתיב... ולגבי השורה הבעייתית כתבתי שהסתדרתי עם טמפ נקסט
 
למעלה