שאלה ב ++C

ד ו ב י ר

New member
שאלה ב ++C

ב"ה שלום קראתי עכשיו באיזה ספר שלא כדאי להשתמש בהוראה using namespace בתוך קובץ כותר (h.*) אני לא כל כך הבנתי את ההסבר, אבל זה קשור לעובדה שאם אני שם את ההוראה בתוך קובץ כותר, אני מאבד את ההגנה של מרחב השמות. 1) אם מישהו מבין את זה ויכול להסביר לי, אני אודה לכם מאוד. 2) נניח שאני רוצה להגדיר אובייקט מסוג vector בתוך מחלקה שאני בונה, אז אני חייב לעשות include <vector# בתוך קובץ הכותר שבו אני מצהיר על המחלקה, אבל אז אני חייב להכניס את using בתוך קובץ הכותר, ואם כן, חזרתי לבעיה הראשונה, אז השאלה שלי היא, האם מישהו יודע איך להתגבר על הבעיה הזו? תודה רבה מראש
 

annefan

New member
תשובות

1. לא מדובר פה ב"הגנה", אבל הכוונה היא שאחת המטרות של ++C היתה ליצור מרחבי שמות מופרדים, שלא כל שמות המשתנים ימצאו באותו מרחב שמות. using מייבא לתוך מרחב השמות של הקובץ שלך את כל השמות מאותו מרחב שמות (לרוב מדובר על std), ואז, נאמר שהגדרת פונקציה בשם min או max, ועכשיו ייבאת את min מתוך std. כשאתה כותב את זה בתוך קובץ cpp שלך, זו כבר הבעיה שלך. כשאתה כותב את זה בתוך קובץ H, כל מי שיכליל אותו בפרויקט שלו, כדי להשתמש בספריה שלך (וקובץ H מגדיר ממשק לספריה, לא לשכוח), יקבל ב"מתנה" את כל מרחב השמות של std. 2. הפתרון הוא להשתמש בשמות שלמים, Fully-qualified name:
std::vector v; std::string s;​
וכדומה.
 
למעלה