פורסם 2010 בספטמבר 215 שנים אני קצת מסתבך סביב עצמי עם פוינטרים לאחרונה.אני מנסה לבצע השמה פשוטה אך משהו כנראה הסתבך לי.יש לי שני מבנים,struct object { void * a; };typedef struct object* objectP;typedef struct { objectP array; }objectArr;typedef objectArr* objectArrP;התרחיש הוא שאני מקבל בשיטה מסוימת את שני הסטראקטים, כפוינטר אליהם, ומעוניין לבצע השמה של אחד בשני.בקטע אחר בתכנית, בוצע איתחול למערך של אובג'קטארר בצורה הבאה:array = (objectP)malloc(sizeof(struct object) * 4);וכעת יש לי שיטה בערך כזו:static void addobject(objectArrP list, objectP obj) { list->array[0] = obj; }כמובן שלא בדיוק 0, ולא בדיוק 4 וכדומה כמובן שזו רק אילוסטרציה להבנת העניין.הכונה בשיטה זו שאני מקבל את האוביקט הזה ומעוניין שהמערך שלי, שהוא מאותו טיפוס, וכבר איתחלתי לו גודל מסוים במקום אחר בתוכנית, כעת התא ה-0 שלו יצביע לאובייקט הנתון לי.בקומפילציה אני מקבל את השגיאה הבאה:error: incompatible types when assigning to type ‘struct object’ from type ‘objectP'אשמח לעזרתכם בנידון, תודה
פורסם 2010 בספטמבר 215 שנים הטיפוס של [list->array[0 הוא object, והטיפוס של obj הוא objectP. אי אפשר לבצע השמה מאחד לשני. על מנת שזה יעבוד, אתה צריך או ש-array יהיה מטיפוס *objectP, או לעשות השמה של obj* במקום obj.
פורסם 2010 בספטמבר 215 שנים מחבר תודה על המענה הזריז,שימוש בהשמה עם *obj, האם זה בעצם יפנה את הפוינטר שיש לי ב array[0] לאוביקט הנתון או שיבצע העתקה שלו by value?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.