הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   [בעיה] C++ (מחלקות ומרחבי שמות) (https://hosts.co.il/forums/showthread.php?t=55218)

Source 16-10-07 23:03

[בעיה] C++ (מחלקות ומרחבי שמות)
 
הערה מקדימה: אני עובד עם VC++ 2005.
ולבעיה:
יצרתי מחלקה String, שהממשק שלה מצוי ב-string.h והמימוש ב-string.cpp, כאשר string.cpp כולל את string.h וכנ"ל main.cpp, שהוא קובץ התוכנית עצמה. כל הקבצים נמצאים באותה תיקייה.
המחלקה משתמשת בטיפוס מוגדר (typedef), והבעיה היא שכאשר אני מגדיר את הטיפוס ב-string.cpp בלבד התוכנית לא עוברת הידור כי string.h לא מכיר את הטיפוס, והתוכנית עוברת הידור רק אם אני מגדיר את הטיפוס גם ב-main.cpp (הגדרת הטיפוס ב-string.h לא משפיעה כלל). אני לא רוצה להגדיר את הטיפוס בכל פעם שאני משתמש בספרייה.

ובעיה נוספת:
כאשר ניסיתי להכניס את ממשק המחלקה String שב-string.h למרחב שמות, והצהרתי ב-string.cpp שימוש במרחב שמות זה, התוכנית לא עברה הידור כי הפונקציות החברות של המחלקה String לא הורשו לגשת לאובייקטי String.


תודה רבה מראש =].

4ior 16-10-07 23:08

אתה צריך להגדיר את הטיפוס בקובץ string.h...
ולא הבנתי כל כך את השאלה השניה...

Source 17-10-07 12:09

ציטוט:

נכתב במקור על ידי 4ior (פרסם 567985)
אתה צריך להגדיר את הטיפוס בקובץ string.h...
ולא הבנתי כל כך את השאלה השניה...

ניסיתי להגדיר את הטיפוס ב-string.h, זה לא שינה לו כלום.

Source 17-10-07 17:26

לא משנה, הבעיה נפתרה - אפשר לנעול.

4ior 17-10-07 17:31

איך פתרת..?

Source 17-10-07 20:47

שכחתי לכלול את iostream בstring.h (הייתי צריך מכיוון שהעמסתי את האופרטורים << ו->>) XD". טעות טיפשית קיצר.
בקשר למרחב שמות, עוד לא בדקתי אם זה נפתר בעזרת משו דעוד לא ניסיתי (ע"י הכנסת מימוש הפונקציות החברות למרחב השמות ולא ההצהרה שלהן כחברות בלבד) - אבל אני כבר לא צריך את זה.


כל הזמנים הם GMT +2. הזמן כעת הוא 04:27.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ