C++ میں 'شروع کے لیے کوئی میچنگ کنسٹرکٹر نہیں' کو کیسے حل کریں

C My Shrw K Ly Kwyy Mychng Kns Rk R N Y Kw Kys Hl Kry



C++ میں کنسٹرکٹر ایک مخصوص ممبر فنکشن ہوتا ہے جو اس کلاس کے نام کے بعد اپنا نام لیتا ہے جس سے اس کا تعلق ہے۔ یہ آبجیکٹ کے ارکان کے لیے کچھ مفید اقدار کی ابتدا کے لیے استعمال ہوتا ہے۔ اگر صارف کے ذریعہ کنسٹرکٹر کی تعریف نہیں کی گئی ہے تو، C++ کمپائلر ایک ڈیفالٹ کنسٹرکٹر تیار کرتا ہے اور اس سے کسی پیرامیٹرز اور خالی باڈی کی توقع نہیں ہوتی ہے۔ تاہم، جب صارف کی طرف سے متعین کنسٹرکٹر موجود ہے، تو اس کے باڈی اور پیرامیٹرز کا اعلان کرنا ضروری ہے۔

C++ میں 'شروع کے لیے کوئی میچنگ کنسٹرکٹر' کی خرابی کی کیا وجہ ہے؟

C++ میں کنسٹرکٹرز کے ساتھ کام کرتے وقت 'No Matching Constructor for Initialization of' کی غلطی کا سامنا کرنا پڑتا ہے اس کا سامنا عام طور پر ہوتا ہے کیونکہ جب کسی کنسٹرکٹر کو کمپائلر کے ذریعہ ڈیفالٹ کنسٹرکٹر کہا جاتا ہے تو وہ تخلیق نہیں ہوتا ہے، لہذا آپ کو کنسٹرکٹر کے پیرامیٹرز اور باڈی کا خود اعلان کرنا ہوگا۔ مناسب پیرامیٹرز کا اعلان کرنے میں ناکامی کے نتیجے میں اس قسم کی تعمیر کنندہ کی خرابی ہوتی ہے۔







ایک سادہ ٹیکسٹ فائل بنائیں، اس میں Square() فنکشن کا کوڈ پیسٹ کریں، اور اسے .h ایکسٹینشن کے ساتھ محفوظ کریں۔ اب اس فائل کو سی پی پی کمپائلر کے بن فولڈر کے شامل فولڈر میں پیسٹ کریں۔ اب، اس ہیڈر فائل کو main.cpp میں کال کرنے پر، اس فائل کو کمپائلر پڑھے گا۔



Square.h ہیڈر فائل

#ifndef SQUARE_H

#SQUARE_H کی وضاحت کریں۔


کلاس مربع {

نجی :

دگنا لمبائی ;

دگنا چوڑائی ;

عوام :

مربع ( دگنا , دگنا ) ;

دگنا حاصل کی لمبائی ( ) const ;

دگنا چوڑائی حاصل کریں۔ ( ) const ;

} ;



مربع :: مربع ( دگنا l دگنا میں ) {

لمبائی = l ;
چوڑائی = میں ;

}



دگنا مربع :: چوڑائی حاصل کریں۔ ( ) const { واپسی چوڑائی ; }

دگنا مربع :: حاصل کی لمبائی ( ) const { واپسی لمبائی ; }



#ختم کرو اگر

main.cpp ہیڈر فائل

# شامل کریں

# 'square.h' شامل کریں

استعمال کرتے ہوئے نام کی جگہ std ;



int مرکزی ( )

{

مربع خانہ 1 ( 10.0 , 10.0 ) ;

مربع خانہ 2 ;



cout << باکس 1 کی چوڑائی اور لمبائی: << box1. چوڑائی حاصل کریں۔ ( ) << '،' << box1. حاصل کی لمبائی ( ) << endl ;

cout << باکس 2 کی چوڑائی اور لمبائی: << box2. چوڑائی حاصل کریں۔ ( ) << '،' << box2. حاصل کی لمبائی ( ) << endl ;



box2 = box1 ;

cout << 'جب اسکوائر باکس 1 مربع باکس 2 کے برابر ہے' << endl ;

cout << باکس 1 کی چوڑائی اور لمبائی: << box1. چوڑائی حاصل کریں۔ ( ) << '،' << box1. حاصل کی لمبائی ( ) << endl ;

cout << باکس 2 کی چوڑائی اور لمبائی: << box2. چوڑائی حاصل کریں۔ ( ) << '،' << box2. حاصل کی لمبائی ( ) << endl ;



واپسی 0 ;

}

اس پروگرام میں، صارف دو مربع خانوں کی لمبائی اور چوڑائی داخل کرتا ہے اور پھر دونوں خانوں کو برابر کرتا ہے اور ان کی لمبائی اور چوڑائی واپس کرتا ہے:




مرتب کرنے والا خط نمبر 14 میں غلطی لوٹاتا ہے کیونکہ ٹھیکیدار کو دو دلائل کی توقع ہے جبکہ اسے کوئی دلیل فراہم نہیں کی گئی ہے۔





لائن # 8 میں کمپائلر کنسٹرکٹر میں ایک خامی واپس کرتا ہے کیونکہ دلائل فراہم نہیں کیے جاتے ہیں جب کہ وضاحتی دلائل ہونے چاہئیں۔

C++ میں 'شروع کے لیے کوئی میچنگ کنسٹرکٹر نہیں' کو کیسے حل کریں

مرتب کرنے والا غلطی کو main.cpp کوڈ کی لائن نمبر 8 میں دکھاتا ہے کیونکہ اسکوائر کے ڈیفالٹ کنسٹرکٹر کو استعمال کرنے کی کوشش کی جاتی ہے۔ کمپائلر ڈیفالٹ کنسٹرکٹر نہیں بنا سکتا کیونکہ پہلے سے ہی صارف کی طرف سے طے شدہ کنسٹرکٹر موجود ہے جو دو دلائل لیتا ہے۔ لہذا، اس کے پیرامیٹرز کی وضاحت کریں:



مربع خانہ 2 ( 0 , 10 ) ;

ایک کمپائلر صرف اس صورت میں ڈیفالٹ کنسٹرکٹر تیار کرتا ہے جب اس کے پاس صارف کی طرف سے متعین کنسٹرکٹر نہ ہو۔ لہذا یہاں اس صورت میں جب ایک کنسٹرکٹر کی تعریف کی گئی ہے، ڈیفالٹ کنسٹرکٹر کو صارف کے ذریعہ فراہم کیا جانا چاہئے۔ لہذا، اس مقصد کے لیے، Square.h فائل میں دو دلیل کنسٹرکٹر میں بھی پہلے سے طے شدہ دلائل فراہم کریں۔ یہ ڈیٹا کو غیر شروع نہیں کرتا ہے۔

مربع :: مربع ( دگنا l = 0 , دگنا میں = 0 )

کنسٹرکٹر کی غلطی کو کنسٹرکٹر اور اس کے پیرامیٹرز کو کال کر کے ٹھیک کیا جا سکتا ہے۔ main.cpp اور Square.h میں کوڈ اوپر دی گئی ہدایات کے مطابق تبدیل کیے گئے ہیں۔ اور غیر مماثل کنسٹرکٹر کی غلطی کو حل کیا گیا ہے۔ یہ ہیڈر فائل کے لیے اپ ڈیٹ کردہ کوڈ ہے:

یہ مرکزی فائل کے لیے اپ ڈیٹ کردہ کوڈ ہے:

ڈیبگنگ کی غلطیوں کے بعد مندرجہ بالا کوڈز درج ذیل آؤٹ پٹ واپس کرتے ہیں:

دو مربع خانوں کی چوڑائی اور لمبائی صارف کے ذریعہ فراہم کی جاتی ہے، اور ان کے پیرامیٹرز واپس کردیئے جاتے ہیں۔ بعد میں دونوں خانوں کو برابر بنانے کے لیے ایک شرط لگائی جاتی ہے، اور پھر ان کی نئی متعلقہ لمبائی اور چوڑائی کی قدریں واپس آ جائیں گی۔

نتیجہ

C++ میں کنسٹرکٹر ایک مخصوص ممبر فنکشن ہوتا ہے جو اس کلاس کے نام کے بعد اپنا نام لیتا ہے جس سے اس کا تعلق ہے۔ یہ آبجیکٹ کے ارکان کے لیے کچھ مفید اقدار کی ابتدا کے لیے استعمال ہوتا ہے۔ C++ میں 'شروع کے لیے کوئی میچنگ کنسٹرکٹر' کی خرابی کا سامنا اس وقت ہوتا ہے جب کنسٹرکٹر کے اعلان میں کوئی خرابی ہوتی ہے۔ عام طور پر، C++ کمپائلر خود ایک کنسٹرکٹر تیار کرتا ہے، لیکن جب صارف کے ذریعے کنسٹرکٹرز کا اعلان کیا جاتا ہے تو اس طرح کی غلطیوں کا سامنا کرنے سے بچنے کے لیے کنسٹرکٹر کے پیرامیٹرز اور باڈی کا مناسب اعلان ہونا چاہیے۔