ABA


"C++. אין אפשרות ליצור מערך אובייקטים מסוג class templat"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15664 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15664
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   17:23   09.01.10   
אל הפורום  
  C++. אין אפשרות ליצור מערך אובייקטים מסוג class templat  
 
   אם יש לי קלאס טמפלייט, אין אפשרות ליצור מערך של אובייקטים מסוג זה?
אני מקבל:
Error 1 error C3203: 'BombaDiscount' : unspecialized class template can't be used as a template argument for template parameter '_Ty', expected a real type


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  תן דוגמא למה אתה מתכוון בדיוק, אבל בגדול טמפלט לא מקבל פויינטרים. ldan192  09.01.10 17:24 1
     בבקשה: זולי  09.01.10 17:26 2
         איפה הגדרת את ה-T? ldan192  09.01.10 18:48 3
             מכתב זולי  09.01.10 18:49 4
                 איפה הוקטור הזה נמצא בדיוק? ב-main? ldan192  09.01.10 18:53 5
                     הוא במחלקה אחרת כרגע. (שמכירה במחלקה השניה) זולי  09.01.10 18:55 6
                         אז גם לה, מן הסתם, צריך להיות טיפוס T כלשהו ldan192  09.01.10 19:07 7
                             איך שכחתי מזה. תודה רבה לך. זולי  09.01.10 19:09 8
                             לא עובד... הוא אומר לי: זולי  09.01.10 19:21 9
                                 כי גם אותו אתה צריך להגדיר מעל לקלאס השני ldan192  09.01.10 20:12 10
                                     אבל אז הקלאס השני יצטרך מתישהו להיות מוגדר עם הטיפוס זולי  09.01.10 20:13 11
                                         שוב, תן דוגמא למה שאתה רוצה לעשות. כי אם אתה מתכוון ldan192  09.01.10 23:13 13
                                             כלומר הקלאס חייב לדעת לפני זמן הריצה את הטיפוס? זולי  10.01.10 00:03 16
                                                 כן. אלא אם כן אתה רוצה לנסות להתחכם עם void* ldan192  10.01.10 00:23 17
                                 ממה שאני זוכר VeNom  09.01.10 22:54 12
                                     זה גם נכון, במידה והקלאס המשני משתמש בטיפוס T ldan192  09.01.10 23:22 14
                                     הוא לא מופרד. זולי  10.01.10 00:02 15

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   17:24   09.01.10   
אל הפורום  
  1. תן דוגמא למה אתה מתכוון בדיוק, אבל בגדול טמפלט לא מקבל פויינטרים.  
בתגובה להודעה מספר 0
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   17:26   09.01.10   
אל הפורום  
  2. בבקשה:  
בתגובה להודעה מספר 1
 
   אני מקווה שזה מספיק ברור אני לא יודע איך ניתן להדביק פה קוד בצורה ברורה יותר:

class BombaDiscount
{
protected:
string m_name;
T* m_discountedItem;
int m_amountToBuy;
float m_discountPercentage;
string m_description;
public:
int getAmountToBuy() {return m_amountToBuy;}
void setAmountToBuy(int amountToBuy) {m_amountToBuy = amountToBuy;}
float getDiscountPercentage() {return m_discountPercentage;}
void setDiscountPercentage(float discountPercentage) {m_discountPercentage = discountPercentage;}
virtual void applyDiscount (BillItemsList& billList)=0;
};

vector<BombaDiscount> m_discounts;


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   18:48   09.01.10   
אל הפורום  
  3. איפה הגדרת את ה-T?  
בתגובה להודעה מספר 2
 

template <class T>
class BombaDiscount
{
protected:
string m_name;
T* m_discountedItem;
int m_amountToBuy;
float m_discountPercentage;
string m_description;
public:
int getAmountToBuy() {return m_amountToBuy;}
void setAmountToBuy(int amountToBuy) {m_amountToBuy = amountToBuy;}
float getDiscountPercentage() {return m_discountPercentage;}
void setDiscountPercentage(float discountPercentage) {m_discountPercentage = discountPercentage;}
virtual void applyDiscount (BillItemsList& billList)=0;
};

עם הדוגמא ל-int
vector<BombaDiscount<int>> m_discounts;

אם הבתי אותך


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   18:49   09.01.10   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 3
 
   לא, אני רוצה שהוקטור ישאר עבור הקלאס עם הטיפוס הכללי כי יש כל מיני קלאסים שיורשים ממנו עם טיפוסים ספיציפיים ואני רוצה שכולם יהיו באותו וקטור.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   18:53   09.01.10   
אל הפורום  
  5. איפה הוקטור הזה נמצא בדיוק? ב-main?  
בתגובה להודעה מספר 4
 
כי בדוגמא שנתת הוא מחוץ לקלאס מרחף בצורה לא ברורה


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   18:55   09.01.10   
אל הפורום  
  6. הוא במחלקה אחרת כרגע. (שמכירה במחלקה השניה)  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   19:07   09.01.10   
אל הפורום  
  7. אז גם לה, מן הסתם, צריך להיות טיפוס T כלשהו  
בתגובה להודעה מספר 6
 
שאליו תפנה
vector<BombaDiscount<T>> m_discounts;

אלא אם כן במחלקה השניה אתה יודע כבר מה הטיפוס שהוקטור יהיה בה ואז תרשום כמו שרשמתי לעי"ל.

תזכור שכל הדברים האלה נבנים בזמן קומפילציה ולא בזמן ריצה (בשונה מ-#Java/C).


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   19:09   09.01.10   
אל הפורום  
  8. איך שכחתי מזה. תודה רבה לך.  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   19:21   09.01.10   
אל הפורום  
  9. לא עובד... הוא אומר לי:  
בתגובה להודעה מספר 7
 
   Error 1 error C2065: 'T' : undeclared identifier c:\users\roni\documents\visual studio 2008\projects\solutionc\300071859\solutionc\catalog.h 31


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   20:12   09.01.10   
אל הפורום  
  10. כי גם אותו אתה צריך להגדיר מעל לקלאס השני  
בתגובה להודעה מספר 9
 
עם <template <class T


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   20:13   09.01.10   
אל הפורום  
  11. אבל אז הקלאס השני יצטרך מתישהו להיות מוגדר עם הטיפוס  
בתגובה להודעה מספר 10
 
   אני מחפש שההמערך עצמו יהיה של קלאס עם טיפוסים שונים בינם לבין עצמם ולא זהים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   23:13   09.01.10   
אל הפורום  
  13. שוב, תן דוגמא למה שאתה רוצה לעשות. כי אם אתה מתכוון  
בתגובה להודעה מספר 11
 
שהוקטור יאותחל עם T לפי הטיפוס הדינמי שלו - זה לא יעבוד.
הכל בזמן קומפילציה.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   00:03   10.01.10   
אל הפורום  
  16. כלומר הקלאס חייב לדעת לפני זמן הריצה את הטיפוס?  
בתגובה להודעה מספר 13
 
   אם כך לא טוב עבורי. אשתמש בפולימורפיזם אחרי הכל. תודה לך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   00:23   10.01.10   
אל הפורום  
  17. כן. אלא אם כן אתה רוצה לנסות להתחכם עם void*  
בתגובה להודעה מספר 16
 
(לא מומלץ ולא בטוח שתצליח להתחכם).


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   22:54   09.01.10   
אל הפורום  
  12. ממה שאני זוכר  
בתגובה להודעה מספר 9
 
   מימוש של מחלקת template נעשה בלי קובץ h..כלומר כל הקלאס+מימוש בקובץ cpp..ולא להפריד אותם לקבצי h ו cpp וזה כי הtemplate הוא בעצם העתקה של הקלאס..
כלומר אם תבנה אובייקט של int ואחד של float אז הוא יבצע 2 העתקות של כל הקלאס..
זה מה שאני זוכר..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   23:22   09.01.10   
אל הפורום  
  14. זה גם נכון, במידה והקלאס המשני משתמש בטיפוס T  
בתגובה להודעה מספר 12
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
זולי 
חבר מתאריך 10.8.04
4426 הודעות
   00:02   10.01.10   
אל הפורום  
  15. הוא לא מופרד.  
בתגובה להודעה מספר 12
 
  


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

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

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



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