כיצד לפתור שגיאה 'אין בנאי תואם לאתחול של' ב-C++

Kyzd Lptwr Sgy H Yn Bn Y Tw M L Thwl Sl B C



ב-C++ בנאי הוא פונקציית איבר מסוימת שמקבלת את שמה אחרי שם המחלקה אליה היא קשורה. הוא משמש לאתחול של כמה ערכים שימושיים עבור חברי האובייקט. אם הבנאי אינו מוגדר על ידי המשתמש, המהדר C++ יוצר בנאי ברירת מחדל ולא מצפה לפרמטרים ולגוף ריק. עם זאת, כאשר יש בנאי מוגדר על ידי משתמש, יש צורך להצהיר על הגוף והפרמטרים שלו.

מה גורם לשגיאת 'אין תואם בנאי לאתחול של' ב-C++?

כאשר עוסקים בבנאים ב-C++ מתמודדים עם שגיאה 'אין בנאי תואם לאתחול של' זה בדרך כלל בגלל שכאשר בנאי נקרא בנאי ברירת המחדל על ידי המהדר לא נוצר, אז אתה צריך להכריז על הפרמטרים והגוף של הבנאי בעצמך. אי הצהרת פרמטרים נאותים מביאה לסוג זה של שגיאת בנאי.







צור קובץ טקסט פשוט, הדבק בו את הקוד של הפונקציה Square() ושמור אותו עם סיומת .h. כעת הדבק את הקובץ הזה בתיקיית include של תיקיית bin של מהדר CPP. כעת, בקריאת קובץ הכותרת הזה ב-main.cpp, הקובץ הזה ייקרא על ידי המהדר.



קובץ כותרת Square.h

#ifndef SQUARE_H

#define SQUARE_H


מעמד כיכר {

פְּרָטִי :

לְהַכפִּיל אורך ;

לְהַכפִּיל רוֹחַב ;

פּוּמְבֵּי :

כיכר ( לְהַכפִּיל , לְהַכפִּיל ) ;

לְהַכפִּיל getLength ( ) const ;

לְהַכפִּיל getWidth ( ) const ;

} ;



כיכר :: כיכר ( לְהַכפִּיל אני, לְהַכפִּיל ב ) {

אורך = ל ;
רוֹחַב = ב ;

}



לְהַכפִּיל כיכר :: getWidth ( ) const { לַחֲזוֹר רוֹחַב ; }

לְהַכפִּיל כיכר :: getLength ( ) const { לַחֲזוֹר אורך ; }



#endif

קובץ הכותרת main.cpp

#include

#include 'square.h'

באמצעות מרחב שמות סטד ;



int רָאשִׁי ( )

{

קופסה מרובעת1 ( 10.0 , 10.0 ) ;

קופסה מרובעת2 ;



cout << 'רוחב ואורך תיבה 1:' << תיבה1. getWidth ( ) << ',' << תיבה1. getLength ( ) << endl ;

cout << 'רוחב ואורך תיבה 2:' << תיבה2. getWidth ( ) << ',' << תיבה2. getLength ( ) << endl ;



תיבה2 = תיבה1 ;

cout << 'כאשר תיבה מרובעת 1 שווה לתיבת ריבוע 2' << endl ;

cout << 'רוחב ואורך תיבה 1:' << תיבה1. getWidth ( ) << ',' << תיבה1. getLength ( ) << endl ;

cout << 'רוחב ואורך תיבה 2:' << תיבה2. getWidth ( ) << ',' << תיבה2. getLength ( ) << endl ;



לַחֲזוֹר 0 ;

}

בתוכנית זו, המשתמש מזין את האורך והרוחב של שתי תיבות מרובעות ולאחר מכן משווה את שתי התיבות ומחזיר את האורך והרוחב שלהן:




המהדר מחזיר את השגיאה בשורה #14 מכיוון שהקבלן מצפה לשני ארגומנטים בזמן שאין לו ארגומנטים:





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

כיצד לפתור שגיאה 'אין בנאי תואם לאתחול של' ב-C++

המהדר מציג את השגיאה בשורה מס' 8 של קוד main.cpp כי מנסים להפעיל את בנאי ברירת המחדל של Square. המהדר לא יכול ליצור בנאי ברירת מחדל מכיוון שיש בנאי שכבר מוגדר על ידי המשתמש שלוקח שני ארגומנטים. לכן, ציין את הפרמטרים שלו כ:



קופסה מרובעת2 ( 0 , 10 ) ;

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

כיכר :: כיכר ( לְהַכפִּיל ל = 0 , לְהַכפִּיל ב = 0 )

ניתן לתקן את שגיאת הבנאי על ידי קריאה והכרזה על הבנאי והפרמטרים שלו כהלכה. הקודים ב-main.cpp וב-Square.h משתנים בהתאם להוראות שניתנו לעיל. ושגיאת הבנאי ללא התאמה נפתרה. זה הקוד המעודכן עבור קובץ הכותרת:

זה הקוד המעודכן של הקובץ הראשי:

הקודים שלעיל לאחר איתור שגיאות מחזירים את הפלט הבא:

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

סיכום

ב-C++ בנאי הוא פונקציית איבר מסוימת שמקבלת את שמה אחרי שם המחלקה אליה היא קשורה. הוא משמש לאתחול של כמה ערכים שימושיים עבור חברי האובייקט. השגיאה 'אין התאמה של בנאי לאתחול של' ב-C++ מתמודדת כאשר יש שגיאה בהצהרה של הבנאי. בדרך כלל, המהדר C++ מייצר בנאי בעצמו, אך כאשר הבנאים מוצהרים על ידי המשתמש, חייבת להיות ההצהרה המתאימה של הפרמטרים והגוף של הבנאי כדי להימנע מלהתמודד עם שגיאות כאלה.