LINKER ERROR

epsilonnow

New member
LINKER ERROR

שלום אני מוסיף בכל HEADER FILE איזשהו DEFINE ומבצע לאחר מכן בדיקה האם הוא כבר הוגדר על מנת שלא לבצע לו INCLUDE מחדש ובכל זאת אני מקבל LINKER ERROR על כפילות בהגדרות. לדוגמא
mouse.h ~~~~~~~ #define __MOUSE_H bla bla bla..... main.c ~~~~~~ #ifndef __MOUSE_H #include"mouse.h" #endif​
וכך בכל מקום בו אני מבצע INCLUDE ל MOUSE.H . מה שכחתי ? האם צריך להגדיר משהו בקומפיילר ? אני משתמש ב BORLAND 3.11 ושם יש לי את השגיאה. בקומפיילר אחר זה לא קורה.....
 
לא עושים את זה ככה

אלא ככה:
mouse.h: ---------- #ifndef _MOUSE_H_ #define _MOUSE_H_ .... #endif main.c: -------- #include "mouse.h" /* as usual - no extra condition is necessary */ ...​
 
לא עושים את זה ככה

אלא ככה:
mouse.h: ---------- #ifndef _MOUSE_H_ #define _MOUSE_H_ .... #endif main.c: -------- #include "mouse.h" /* as usual - no extra condition is necessary */ ...​
 

tomashin

New member
אממ

את מגן ההוספה אתה צריך למקם בתוך קובץ הראש.. נגיד ככה
#ifndef MOUSE_H #define MOUSE_H //here you you add the file #endif​
כמו שאתה רואה יש לך פעולת קדם מעבד בשם ifndef ,היא בודקת אם לא הוגדר המונח MOUSE_H אם הוא לא מוגדר היא מגדירה אותו ובתוך התנאי הזה אתה שם את שאר הקובץ. נגיד ויהיו לך שני קבצי כותר שיכלילו בתוכם את הקובץ הזה ,ואת שני הקבצים האלה תכליל בקובץ C/++C אז זה יכליל את קובץ mouse.h פעם אחת ואז בבדיקה הבאה המונח כבר יהיה מוגדר ,ובכך פתרת את הבעיה. בהצלחה
 

tomashin

New member
ובקשר למהדר

יש גרסה יותר חדשה של בורלנד והיא:5.5.1 והיא חינמית וניתן להוריד אותה באתר של בורלנד..
 

epsilonnow

New member
הבעיה נפתרה. תודה.

פשוט לא שמתי לב שהמימוש של הפונקציות היה בתוך ה HEADER FILE. ככה זה כשאנשים מחפפים
 
זה לא יעזור

בכל המקרים להעיף מה-HEADER את המימוש של הפונקציות! ישנם מקרים אחרים שבהם זה לא יעבור קומפילציה. ובמקום שאפרט אותם עכשיו עם דוגמאות (ויש לי), כדאי שתוסיף את מעטפת ה-IFNDEF/DEFINE/ENDIF שאני ועוד כמה הציעו לך.
 
למעלה