ABA


"שאלה בC קובץ file.c, file.h, main.c שאלה בקשר לחלוקה"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10205 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10205
Ice_Man
חבר מתאריך 14.11.05
1161 הודעות
   23:57   27.12.10   
אל הפורום  
  שאלה בC קובץ file.c, file.h, main.c שאלה בקשר לחלוקה  
 
   אז ב file.h אני שם את כל השיטות. השאלה איפה אני שם את הtypdef ואת ה structים.
ו-ב main.c ו ב file.c אני עושה אינקולד ל file.h.

אם אני שם את הtypedef ואת ה structים ב file.h
שאני מקמפל אני מקבל שגיאה:

./set.o:(.data+0x0): multiple definition of `mats'
./main.o:(.data+0x0): first defined here
./set.o:(.data+0x40): multiple definition of `cmd'
./main.o:(.data+0x40): first defined here
collect2: ld returned 1 exit status
make: *** Error 1

אני טועה ? אם כן, איפה לשנות. אם לא, למה יש לי שגיאה קומפליציה ?


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הגדרות כפולות. זה יכול להיות מכמה סיבות. Zippo  28.12.10 19:24 1
     חבר שלי התחבר אלי למחשב, הבעייה נפתרה Ice_Man 28.12.10 21:19 2
         מכתב Dotan  31.12.10 01:52 3
             זה non standard, זה מתאים רק לקומפיילרים מסוימים Net_Boy  31.12.10 17:46 4
                 כן, לינוקס. מה זה אגב ifndef ? ואם אפשר דוגמא לשימוש.. Ice_Man 01.01.11 19:10 5
                     מאקרו Zippo  01.01.11 19:58 6
                         תודההה Ice_Man 01.01.11 20:47 7

       
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   19:24   28.12.10   
אל הפורום  
  1. הגדרות כפולות. זה יכול להיות מכמה סיבות.  
בתגובה להודעה מספר 0
 
אבל הכי סביר שפשוט האינקלוד מבוצע פעמיים ללא מאקרו שמגן עליו.
תכתוב את כל הקובץ H שלך בתוך:

#ifndef FILE_H
#define FILE_H

all the File.h code comes here

#endif


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice_Man
חבר מתאריך 14.11.05
1161 הודעות
   21:19   28.12.10   
אל הפורום  
  2. חבר שלי התחבר אלי למחשב, הבעייה נפתרה  
בתגובה להודעה מספר 1
 
   חלק מהדברים באמת בוצעו פעמיים..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   01:52   31.12.10   
אל הפורום  
  3. מכתב  
בתגובה להודעה מספר 2
 
   כמו שאמרו לך, יכלת לפתור את זה עם IFNDEF וDEFINE
ויכולת גם לשים בקבצי H שלך למעלה:

#pragma once

וזה היה מונע הגדרות כפולות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   17:46   31.12.10   
אל הפורום  
  4. זה non standard, זה מתאים רק לקומפיילרים מסוימים  
בתגובה להודעה מספר 3
 
   וזה נראה כאילו הוא כותב בלינוקס אז תמיד עדיף להשתמש ב ifndef


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice_Man
חבר מתאריך 14.11.05
1161 הודעות
   19:10   01.01.11   
אל הפורום  
  5. כן, לינוקס. מה זה אגב ifndef ? ואם אפשר דוגמא לשימוש..  
בתגובה להודעה מספר 4
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Zippo 
חבר מתאריך 26.5.02
7921 הודעות
   19:58   01.01.11   
אל הפורום  
  6. מאקרו  
בתגובה להודעה מספר 5
 
תכתוב תוכנית כלשהיא, למשל HELLO WORLD

את הפקודה עצמה תעטוף:

#ifdef HELLO
printf("Hello!\n");
#else
printf("Goodbye!\n);
#endif

תקמפל פעמיים. פעם אחת בלי כלום.
פעם שנייה תוסיף:

#define HELLO

בראש הקובץ.

בקובץ שהגדרת HELLO, המשפט שיודפס יהיה Hello!.
בקובץ השני Goodbye!.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice_Man
חבר מתאריך 14.11.05
1161 הודעות
   20:47   01.01.11   
אל הפורום  
  7. תודההה  
בתגובה להודעה מספר 6
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net