C++ میں 'Cout مبہم ہے' خرابی۔

C My Cout Mb M Khraby



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

مثال 1:

یہ ایک cout مبہم غلطی کی ایک مثال ہے جو زیادہ تر C++ پروگرامنگ میں ہوتی ہے۔ یہاں، ہم دیکھیں گے کہ جب ہم متعدد نام کی جگہیں استعمال کرتے ہیں تو کمپائلر cout پر مبہم غلطیاں کیسے پیدا کرتا ہے۔ اس مثال کے کوڈ کا ٹکڑا درج ذیل میں ذکر کیا گیا ہے۔







# شامل کریں

نام کی جگہ لیپ ٹاپ {

باطل ڈسپلے ( ) {

std :: cout << 'یہ لیپ ٹاپ نام کی جگہ ہے' << std :: endl ;

}

}

نام کی جگہ موبائل {

باطل ڈسپلے ( ) {


std :: cout << 'یہ موبائل نام کی جگہ ہے' << std :: endl ;

}

}

int مرکزی ( ) {

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

ڈسپلے ( ) ;

واپسی 0 ;


}

یہاں، ہم نے دو نام کی جگہوں کے ساتھ ایک پروگرام لیا جو ہماری ضرورت کے مطابق بیان کیے گئے ہیں۔ ہم سکرین پر تاروں کو ظاہر کرنا چاہتے ہیں۔ اس کوڈ کا آؤٹ پٹ درج ذیل میں منسلک ہے:





کوڈ پر عمل درآمد کے بعد، مبہم صورتحال کے بارے میں غلطی پیدا ہوتی ہے۔ خرابی پیدا ہوتی ہے کیونکہ جب کمپائلر کوڈ کو پڑھتا ہے تو کمپائلر کو صارف کے اختتام سے واضح ان پٹ نہیں ملتا ہے۔ ہم نے اپنے کوڈ میں متعدد نام کی جگہ کے اعلانات کا استعمال کیا۔ پورے کوڈ میں، ہم نے صرف اسکرین پر آؤٹ پٹ کو ظاہر کرنے کے لیے 'ڈسپلے' کا طریقہ استعمال کیا۔ مرتب کرنے والے کو اندازہ نہیں ہے کہ ڈسپلے کا کون سا طریقہ کس نام کی جگہ سے متعلق ہے۔ ہمیں کوڈ کو سادہ اور واضح کرنے کی ضرورت ہے تاکہ مرتب کرنے والا کوڈ کو مبہم بنائے بغیر مراحل کو آسانی سے سمجھ سکے۔





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

# شامل کریں

نام کی جگہ لیپ ٹاپ {

باطل ڈسپلے ( ) {


std :: cout << 'یہ لیپ ٹاپ نام کی جگہ ہے' << std :: endl ;

}

}

نام کی جگہ موبائل {

باطل ڈسپلے ( ) {

std :: cout << 'یہ موبائل نام کی جگہ ہے' << std :: endl ;

}

}

int مرکزی ( ) {

استعمال کرتے ہوئے نام کی جگہ لیپ ٹاپ ;
استعمال کرتے ہوئے نام کی جگہ موبائل ;
لیپ ٹاپ :: ڈسپلے ( ) ;
واپسی 0 ;


}

یہاں، ہم صرف ڈسپلے() طریقہ کو مین فنکشن میں 'لیپ ٹاپ' نام کی جگہ سے جوڑ سکتے ہیں جیسا کہ پچھلے اسکرین شاٹ میں دیکھا گیا ہے۔ اب، پروگرام چلائیں. آؤٹ پٹ کنسول ونڈو پر ظاہر ہوتا ہے۔



مثال 2:

یہ منظر نامہ C++ میں cout مبہم غلطی سے متعلق ہے۔ مرتب کرنے والا ایک غلطی دکھاتا ہے جب وہ عملدرآمد کے بہاؤ کو نہیں سمجھتا ہے۔ اس مثال کے کوڈ کا ٹکڑا درج ذیل میں منسلک ہے:

# شامل کریں

نام کی جگہ لہجہ {

باطل پرنٹ کریں ( int میں ) {

std :: cout << 'C زبان کا نام کی جگہ:' << میں << std :: endl ;

}

}

نام کی جگہ java {

باطل پرنٹ کریں ( int جے ) {

std :: cout << 'جاوا زبان کے نام کی جگہ:' << جے << std :: endl ;

}

}

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

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

int مرکزی ( ) {

پرنٹ کریں ( 5 ) ;
واپسی 0 ;


}

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

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

مین مینو سے 'Execut' آپشن پر کلک کریں اور 'compile & run' آپشن کو منتخب کریں۔ ابہام کے بارے میں خرابی اس کوڈ پر عمل درآمد پر ہوتی ہے۔ غلطی کا اسکرین شاٹ اس طرح منسلک ہے:

یہ ایرر اشارہ کرتا ہے کہ کمپائلر اوور لوڈڈ پرنٹ() فنکشن کے بارے میں الجھن میں ہے جسے کہا جاتا ہے۔ یہ خرابی لائن 19،  'پرنٹ (5)' پر ہے۔ کمپائلر اس نام کی جگہ کے بارے میں الجھن میں ہے جس سے یہ اوورلوڈ فنکشن تعلق رکھتا ہے۔ شروعات کرنے والے اکثر اوقات اس قسم کی غلطیوں میں پھنس جاتے ہیں۔

آئیے اس غلطی کو حل کریں جو حقیقت میں پیچیدہ نہیں ہے۔ مبہم غلطیاں آسانی سے حل ہو جاتی ہیں۔ کمپائلر کی مرئیت اور تفہیم کے لیے ہمیں 'مین' فنکشن میں اوورلوڈ فنکشن کے ساتھ نام کی جگہ کی وضاحت کرنی چاہیے۔ جیسا کہ اس پروگرام میں ہے، ہم اس 'java::print(5)' کو اپنے موجودہ کوڈ میں شامل کرتے ہیں جیسا کہ درج ذیل میں بتایا گیا ہے۔

# شامل کریں

نام کی جگہ لہجہ {

باطل پرنٹ کریں ( int میں ) {

std :: cout << 'C زبان کا نام کی جگہ:' << میں << std :: endl ;

}

}

نام کی جگہ java {

باطل پرنٹ کریں ( int جے ) {

std :: cout << 'جاوا زبان کے نام کی جگہ:' << جے << std :: endl ;

}

}

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

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

int مرکزی ( ) {

java :: پرنٹ کریں ( 5 ) ;
واپسی 0 ;


}

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

مثال 3:

یہ ایک مبہم مسئلے کی وجہ سے پیدا ہونے والی غلطی سے متعلق آخری اور آخری مثال ہے۔ مرتب کرنے والا صحیح نتیجہ حاصل نہیں کر سکتا۔ صارف کی بہتر تفہیم کے لیے اس مثال کے کوڈ کا ٹکڑا درج ذیل میں منسلک کیا گیا ہے۔

یہاں، ہم مطلوبہ لائبریریوں کی وضاحت کرتے ہیں۔ اس کے بعد، ہم ایک نام کی جگہ کی وضاحت کرتے ہیں جس میں وہ کلاس ہوتی ہے جس میں ہم کنسول ونڈو پر سٹرنگ ڈسپلے کرنا چاہتے ہیں۔ ہم اس متعین نام کی جگہ کو 'مین' فنکشن میں 'c' متغیر کے ساتھ کہتے ہیں۔ اس کے بعد، ہم نام کی جگہ آبجیکٹ کا استعمال کرتے ہوئے print() طریقہ کو کہتے ہیں۔ ہم طریقہ کال کے بعد کنسول اسکرین پر دوبارہ سٹرنگ ڈسپلے کرتے ہیں۔ آؤٹ پٹ دونوں تاروں کا ہونا چاہیے اور کنسول اسکرین پر ظاہر ہونا چاہیے۔ جب ہم اس کوڈ پر عمل کرتے ہیں، تو غلطی اس وقت ہوتی ہے جیسا کہ درج ذیل میں دکھایا گیا ہے۔

# شامل کریں

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

نام کی جگہ myNamespace {

کلاس cout {
عوام :
باطل پرنٹ کریں ( ) {


cout << 'حسب ضرورت کاؤٹ' << std :: endl ;

}

} ;

}

int مرکزی ( ) {

myNamespace :: cout c ;
c پرنٹ کریں ( ) ;


cout << 'ہیلو، دنیا!' << std :: endl ;

واپسی 0 ;

}

مرتب کرنے والے نے cout بیان نہیں اٹھایا جو ڈیٹا کو کنسول اسکرین پر دکھاتا ہے۔ مرتب کرنے والا نام کی جگہ کو نہیں سمجھ سکتا جو cout بیان سے تعلق رکھتا ہے اور ایک غلطی پیدا کرتا ہے۔ اس خرابی کا حل یہ ہے کہ کمپائلر پڑھنے اور سمجھنے کے لیے cout اسٹیٹمنٹ کے ساتھ ایک namespace آبجیکٹ کا اضافہ کیا جائے۔ cout بیان کے ساتھ 'std::' شامل کریں اور کوڈ چلائیں۔ مندرجہ ذیل آؤٹ پٹ کنسول اسکرین پر ظاہر ہوتا ہے:

نتیجہ

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