שאלה בסיפיפי

שאלה בסיפיפי

אממ השאלה היא כזו... יש לי מחלקה cls למחלקה מוגדר default constructor ו constructor שמקבל כפרמטר int ו copy constructor שמן הסתם מקבל פרמטר מסוג &cls עכשיו כאשר אני עושה דבר כזה:
cls a = cls(5);​
אני מקבל אררור:
no matching function for call cls::cls(cls) candidates are: cls::cls(cls&) cls::cls(int)​
 

זהיר

New member
אתה צריך CONST

העצם שמימין לסימן = ( (5)CLS) הוא עצם זמני (אין לו שם, למשל, ואין מצביע אלין) ולכן אינו יכול לעבור כ REFERENCE שאיננו CONST. לכן אתה צריך להגדיר את ה COPY CTOR שלך כך
cls::cls(const cls& c) {....}​
בכלל תמיד צריך (אפילו שהרוב מזלזלים) להגדיר פרמטר לפונקציה כ CONST-REFERENCE אלא אם הפונקציה באמת משנה את תוכנו (או BY-VALUE, אם רוצה/צריך/כדאי עותק נפרד). קוראים לזה CONST-CORRECTNESS. דרך אגב, אפשר להגדיר שני COPY CTORS שונים: אחד מקבל CONST והשני לא-CONST (אבל חייבים REFERENCE). תכנתו בזהירות
 
למעלה