כותב |
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 02 August 2006 בשעה 18:25 | | IP רשוּם
|
|
|
|
לא הבנת את המשתנים הסטטיסטים ממש אני הבנתי שזה של המחלקה ולא של כל אחד בנפרד אלה שלה מלא אז איך אני יכול לעשות משתנה שיודפס ע"י המחלקה ככה:
קוד:
private: static int count; public: static int getCount() {return count; }
|
|
|
אז איך אני מאפס את count ? הרי זה private אזי
לא יעבוד..
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 02 August 2006 בשעה 21:03 | | IP רשוּם
|
|
|
|
הכל אצלך הפוך. אם אתה יוצר משתנה סטטי (ולא משנה מה טווח ההכרה שלו)
במתוך מחלקה, אתה חייב להצהיר עליו בנוסף מחוץ לה, בדיוק באופן שאמרת ש"לא
יעבוד". לדוגמה:
קוד:
#include <iostream>
class cls
{
private:
static int m_i;
public:
int get_i(void){return m_i;}
void set_i(int i){m_i=i;}
};
int cls::m_i=0;
int main(void)
{
using namespace std;
cls o;
cout << o.get_i() << endl;
return 0;
}
|
|
|
אם נסיר את השורה:
int cls::m_i=0;
כל העסק לא ילך. ב-VCPP6 נקבל את השגיאה הבאה בזמן הקישור:
קוד:
--------------------Configuration: tmp - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "private: static int cls::m_i" (?m_i@cls@@0HA)
Debug/tmp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...
tmp.exe - 2 error(s), 0 warning(s)
|
|
|
אם המשתנה לא היה סטטי, לא היה צורך בהצהרה החיצונית.
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 02 August 2006 בשעה 21:56 | | IP רשוּם
|
|
|
|
אוקי אז מה שעשיתי עובד. ואני מעדיף להשתמש בפונקציה סטטית בשביל לקרוא לה דרך המחלקה עצמה ככה cls::getCount() מאשר לקרוא דרך משתנה למחלקה
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 03 August 2006 בשעה 02:05 | | IP רשוּם
|
|
|
|
זכותך.
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 03 August 2006 בשעה 10:30 | | IP רשוּם
|
|
|
|
פונקציה סטטית אבל לא יכולה לגשת למשתנים שהם לא סטטים באותה מחלקה...
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 03 August 2006 בשעה 21:12 | | IP רשוּם
|
|
|
|
Fate כתב:
פונקציה סטטית אבל לא יכולה לגשת למשתנים שהם לא סטטים באותה מחלקה... |
|
|
מה גורם לך לחשוב כך?
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 03 August 2006 בשעה 23:33 | | IP רשוּם
|
|
|
|
הוא צודק, היא לא יכולה לגשת למשתנה שלא סטטי במחלקה כי היא נקראת דרך הCLASS עצמה ולא דרך משתנה מחלקה.
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 03 August 2006 בשעה 23:33 | | IP רשוּם
|
|
|
|
שוב אני ^ אבל זה לא הייעוד שלה לקרוא למשתנים לא סטטים
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 03 August 2006 בשעה 23:38 | | IP רשוּם
|
|
|
|
אין לי מושג מה ניסית להגיד פה.
|
חזרה לתחילת העמוד |
|
|
Fate פורומיסט על
הצטרף / הצטרפה: 25 October 2005
משתמש: מנותק/ת הודעות: 571
|
נשלח בתאריך: 04 August 2006 בשעה 16:32 | | IP רשוּם
|
|
|
|
משתנה סטטי, ופונקציה סטטית לא משויכים לInstance של Class כלשהו... מזה נובע שני דברים: א) לא צריך ליצור Class ולהקצות לו זיכרון כדי להשתמש בפונקציה סטטית או משתנה סטטי ב) לפונקציה סטטית אין Instance משוייך, לכן היא יכולה לגשת רק למשתנים סטטים, או לקרוא לפונקציות סטטיות אחרות.
|
חזרה לתחילת העמוד |
|
|
אורח אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 05 August 2006 בשעה 16:52 | | IP רשוּם
|
|
|
|
וזה מה שנסיתי להגיד..
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 13 August 2006 בשעה 01:54 | | IP רשוּם
|
|
|
|
בואו ננסה שוב: מה הבעיה? :(
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 13 August 2006 בשעה 11:07 | | IP רשוּם
|
|
|
|
ננסה שוב, והפעם ננסה ניסוח ברור יותר: מה הבעיה בקוד ו/או בהסבר שלי?
אלצ'קו כתב:
הכל אצלך הפוך. אם אתה יוצר משתנה סטטי (ולא משנה מה טווח ההכרה שלו)
במתוך מחלקה, אתה חייב להצהיר עליו בנוסף מחוץ לה, בדיוק באופן שאמרת ש"לא
יעבוד". לדוגמה:
קוד:
#include <iostream>
class cls
{
private:
static int m_i;
public:
int get_i(void){return m_i;}
void set_i(int i){m_i=i;}
};
int cls::m_i=0;
int main(void)
{
using namespace std;
cls o;
cout << o.get_i() << endl;
return 0;
}
|
|
|
אם נסיר את השורה:
int cls::m_i=0;
כל העסק לא ילך. ב-VCPP6 נקבל את השגיאה הבאה בזמן הקישור:
קוד:
--------------------Configuration: tmp - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "private: static int cls::m_i" (?m_i@cls@@0HA)
Debug/tmp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
Creating browse info file...
tmp.exe - 2 error(s), 0 warning(s)
|
|
|
אם המשתנה לא היה סטטי, לא היה צורך בהצהרה החיצונית.
|
|
|
הבעיה היא לא באיפוס, אלא בקישור. משתנה חבר מחלקה סטטי שאיננו קבוע חייב להיות מוצהר מחוץ למחלקה (כמו משתנה "גלובאלי").
אתה חושב שזה לא נכון? (רוצה הפניות?) אתה חושב ששהסבר המקורי שלי לא
נכון? (יש לך אחד יותר טוב?) אתה חושב שהקוד שהבאתי לא פועל? (נסה לקמפל
בעצמך) אתה חושב שהשגיאה שהבאתי לא תתרחש? (זה כבר מצחיק)
למשתנה סטטי ניגשים דרך שם המחלקה. זה כמובן נכון, אבל לא רלבנטי. השאלה הייתה: מה הבעייה עם התשובה שלי לאורח?
|
חזרה לתחילת העמוד |
|
|
SDX אורח
הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין הודעות: 12647
|
נשלח בתאריך: 14 August 2006 בשעה 12:28 | | IP רשוּם
|
|
|
|
לא נראה לי שהוא התכוון שיש לך בעיה בהסבר, הוא רק הוסיף שאי אפשר לגשת למשתנים פרטיים דרך פונקציה סטטית, לאורח שאמר שהוא מעדיף לקרוא למשתנה סטטי דרך פונקציה סטטית.. ואם צריך לעבוד עם משתנים פרטיים זה לא יעבוד.
|
חזרה לתחילת העמוד |
|
|
אלצ'קו אחראי פורומים
ג2ר פ33תי
הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת הודעות: 609
|
נשלח בתאריך: 14 August 2006 בשעה 12:41 | | IP רשוּם
|
|
|
|
בטח שאפשר לגשת למשתנים פרטיים דרך פונקציה סטטית, כל עוד המשתנים הפרטיים הם סטטיים בפני עצמם.
|
חזרה לתחילת העמוד |
|
|