make clean
New member
תודה על כל התגובות
אחרי קריאת התגובות וקצת ניסויים שעשיתי אני נוטה לחשוב שהקומפיילר באמת משאיר קטעים של template לסוף הקומפילציה (אחרי סוג של עיבוד ראשוני בלבד ) ולכן כשהוא מייצר את הקוד הרלוונטי הוא כבר מכיר גם את ההגדרה של A ולכן אין לו בעיה .
יכול להיות שזה באמת תלוי מימוש ושתקן השפה לא תומך בזה.
מצורף קוד שמתקמפל (שברור שיקרוש בזמן ריצה) שמראה שלקומפיילר אין בעיה לקרוא לפונקציות שמכניסות A ל list למרות שהוא עדיין לא מוגדר למרות שלהגדיר A ממש ברור שהוא לא יכול.
#include <list>
using namespace std;
struct A;
void foo(){
list<A> lA;
A* pa=0;
list<A>::iterator itA=lA.begin();
lA.push_front(*pa);
lA.push_front(*itA);
lA.insert(itA , *itA );
//A a=*itA;
//pa =newA(*itA);
}
struct A{
};
אחרי קריאת התגובות וקצת ניסויים שעשיתי אני נוטה לחשוב שהקומפיילר באמת משאיר קטעים של template לסוף הקומפילציה (אחרי סוג של עיבוד ראשוני בלבד ) ולכן כשהוא מייצר את הקוד הרלוונטי הוא כבר מכיר גם את ההגדרה של A ולכן אין לו בעיה .
יכול להיות שזה באמת תלוי מימוש ושתקן השפה לא תומך בזה.
מצורף קוד שמתקמפל (שברור שיקרוש בזמן ריצה) שמראה שלקומפיילר אין בעיה לקרוא לפונקציות שמכניסות A ל list למרות שהוא עדיין לא מוגדר למרות שלהגדיר A ממש ברור שהוא לא יכול.
#include <list>
using namespace std;
struct A;
void foo(){
list<A> lA;
A* pa=0;
list<A>::iterator itA=lA.begin();
lA.push_front(*pa);
lA.push_front(*itA);
lA.insert(itA , *itA );
//A a=*itA;
//pa =newA(*itA);
}
struct A{
};