עבור לתוכן

שגיאה בפעולה בשניתי בc#

Featured Replies

פורסם

אין לי מושג למה הוא נותן לי את השגיאה הבאה:

Error	1	'Unit4.CollectionsLib.Queue<int>' does not contain a constructor that takes '1' arguments	C:\ConsoleApplication1\ConsoleApplication1\Class1.cs	13	30	ConsoleApplication1

בפעולה הנ"ל:

    public static int Size(Queue<int> qt1)
{
int x = 0;
Queue<int> qt2 = new Queue<int>(qt1);
while (!qt2.IsEmpty())
{
qt2.Remove();
x++;
}
return x;
}

  • תגובות 30
  • צפיות 3.2k
  • נוצר
  • תגובה אחרונה
פורסם

בדיוק מה שהוא אומר - ל-Queue אין קונסטרקטור שמקבל פרמטר אחד.

פורסם

התור שאתה עובד איתו הוא מה שמוטמע בויז'ואל סטודיו, או אחד שאתה יצרת?

כי בזה של הויז'ואל אין כזו פונקציה IsEmpty.

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

פורסם

זה לא התור של דוטנט (שים לב שהחבילה נקראת Unit4.CollectionsLib). מחיפוש קצרצר בגוגל מצאתי את החבילה באתר של האוניברסיטה העברית, אז אני מניח שזה חבילה שנכתבה בשביל איזשהו קורס כלשהו שם.

פורסם

אז תבדוק איזה שיטות בונות יש למחלקה הזו.

פורסם

אני בדקתי, אבל אני מחכה לפותח הת'רד שיבדוק בעצמו :)

פורסם
  • מחבר

מצטער אבל עדיין לא הבנתי.. מה זאת אמרת

"קונסטרקטור שמקבל פרמטר אחד"?

פורסם

בדיוק כמו שהשם אומר. פונקציית בנאי (קונסטקטור) שמקבלת פרמטר אחד.

פורסם

עשית כזה דבר (סלח לי שאני מפשט קצת ומעיף את ה-<int>, פשוט תעמיד פנים שהוא מופיע בכל מקום שכתבתי את המילה Queue)

Queue qt2 = new Queue(qt1);

כלומר, יצרת Queue חדש ע"י קריאה לבנאי (אחרי new תמיד בא בנאי), עם פרמטר אחד - qt1.

אבל, ל-Queue אין שום בנאי שמקבל פרמטר אחד. לפי התיעוד כאן:

http://sites.huji.ac.il/science/unit4_2007/Csharp/Unit4/Unit4Guide.htm

(אני מניח שזו החבילה שאתה משתמש בה, כן?)

יש ל-Queue רק בנאי שלא מקבל פרמטרים בכלל. כלומר, הדרך היחידה לאתחל Queue היא באמצעות:

Queue qt2 = new Queue();

יש מבין?

פורסם
  • מחבר

אה... תודה רבה. עכשיו הבנתי.

אז אם אני רוצה ליצור תור חדש למשל qt2 שיהיה העתק של התור qt1 מה הדרך הכי יעילה לעשות זאת?

פורסם

בדרך הבאה:

Queue qt2 = qt1;

כאשר qt1 הוא פרמטר מסוג Queue שקיבלת בתור פרמטר מהפונקציה.

פורסם
  • מחבר

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

פורסם

זו הפואנטה בתרגיל.

כיוון שהמחלקה לא מספקת כזו פונקציונליות, תצטרך לממש אותה בעצמך באמצעות פעולות Insert/Remove.

פורסם

אולי זה מעבר לדרישות התרגיל, אבל אם האובייקט הוא serializable, אתה יכל ליצור העתק (deep copy ) ע"י סריאליזציה ל memoryStream.

פורסם

לא רק שזה מעבר לדרישות התרגיל, זה overkill מטורף, וממש לא הייתי ממליץ על הפתרון הזה. חוץ מזה, זה יגרום שכפול גם של איברי התור, ולא רק של התור עצמו.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים